07/09/2018, 15:35

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..

0