Dùng gem friendly_id để tạo url đẹp trong Ruby on Rails
Trang web demo Thông thường, Rails sẽ mặc định tạo url cho các record theo dạng id, cụ thể là /articles/1, /articles/1/edit. Trong bài viết này mình sẽ cùng tìm hiểu về cách tạo một url dễ đọc, ví dụ như là /articles/bai-viet-so-1, /users/yuto-yasunaga. OPTIONAL: Tạo môi trường Bootstrap nhanh ...
Trang web demo
Thông thường, Rails sẽ mặc định tạo url cho các record theo dạng id, cụ thể là /articles/1, /articles/1/edit. Trong bài viết này mình sẽ cùng tìm hiểu về cách tạo một url dễ đọc, ví dụ như là /articles/bai-viet-so-1, /users/yuto-yasunaga.
OPTIONAL: Tạo môi trường Bootstrap nhanh cho trang web Ruby on Rails
Chúng ta bắt đầu vào việc tạo trang web
Gemfile
gem 'friendly_id'
Tạo scaffold Article: rails g scaffold Article title content:text
Thêm slug vào cơ sở dữ liệu Article: rails g migration add_slug_to_articles slug
Migrate cơ sở dữ liệu: rake db:migrate
Nếu trước đó bạn đã có dữ liệu trong model Article rồi thì làm thêm bước sau:
rails c
Article.find_each(&:save)
Tiếp theo chúng ta sẽ dùng friendly_id để lấy tiêu đề bài viết làm url
app/models/article.rb
extend FriendlyId friendly_id :title, use: [:slugged, :finders]
Trong trường hợp bạn muốn url phải thay đổi khi chúng ta update tiêu đề (title) của một bài viết:
private def should_generate_new_friendly_id? slug.blank? || title_changed? end
Giải thích:
Nếu dùng use: :finders, thì khi truy vấn dữ liệu, chúng ta vẫn làm như bình thường:
@article = Article.find(params[:id])
Nếu không dùng use: :finders, thì khi truy vấn dữ liệu, chúng ta phải làm như sau:
@article = Article.friendly.find(params[:id])
Lưu ý: url sẽ không được như ý muốn nếu ngôn ngữ viết là tiếng Việt, tiếng Nhật..v.v..