Friendly-URLs
Chúng ta thường thấy các trang web từ Rails xây dựng url dựa trên primary key-cột id từ database. Bây giờ hãy tưởng tượng chúng ta có một model Person và các associated. Chúng ta có 1 record người dùng với tên Bob Martin và có id là 6. Theo mặc định, url show record trên sẽ là / people / 6 ...
Chúng ta thường thấy các trang web từ Rails xây dựng url dựa trên primary key-cột id từ database. Bây giờ hãy tưởng tượng chúng ta có một model Person và các associated. Chúng ta có 1 record người dùng với tên Bob Martin và có id là 6. Theo mặc định, url show record trên sẽ là
/people/6
Nhưng đối với các mục đích về SEO hay thậm chí là thẩm mĩ, chúng ta sẽ muốn có tên của Bob trong url. Số 6 ở cuối url được gọi là "slug". Chúng ta hãy xem xét 1 vài cách để implement url trên tốt hơn
Simple Approach
Phương pháp đơn gianr nhất là override method to_param trong Persol model. Bất cứ khi nào cúng ta gọi route helper như sau:
person_path(@person)
Rails sẽ gọi đến method to_param để chuyển object đến 1 slug cho url. Trong model của chúng ta nếu không define 1 method to_param thì Rails sẽ mặc định sử dụng method trong ActiveRecord::Base và trả về id Để sử dụng to_param, điều quan trọng là sử dụng các đối tượng ActiveRecord thay cho id. Đừng bao giờ sử dụng:
person_path(@person.id) # Bad!
Thay vào đó, hãy sử dụng:
person_path(@person)
Slug Generation with to_param
Trong model, chúng ta có thẻ override to_param bao gồm 1 parameterized version của person's name:
class Person < ActiveRecord::Base def to_param [id, name.parameterize].join("-") end end
Phương pháp trên sẽ biến bất kì 1 chuỗi nào thành kí tự hợp lệ cho url. Trong ví dụ của chúng ta, kết quả trả về sẽ là
/people/6-bob-martin
Object Lookup
Chúng ta cần làm gì để thay đổi finder của chúng ta? Không gì cả