12/08/2018, 14:01

Giới thiệu về Friendly URLs

Chào mọi người, hôm nay mình sẽ giới thiệu về cách tạo đường dẫn thân thiện một cách nhanh chóng. Theo mặc định, một ứng dụng rails xây dựng các URL dựa trên khóa chính - tức là cột id của cơ sở dữ liệu. Hãy tưởng tượng chúng ta có một model là Person. Và chúng ta có một bản ghi Nguyễn Văn A có ...

Chào mọi người, hôm nay mình sẽ giới thiệu về cách tạo đường dẫn thân thiện một cách nhanh chóng.

Theo mặc định, một ứng dụng rails xây dựng các URL dựa trên khóa chính - tức là cột id của cơ sở dữ liệu. Hãy tưởng tượng chúng ta có một model là Person. Và chúng ta có một bản ghi Nguyễn Văn A có id là 6. Thì URL cho trang show của anh A là:

/people/6

Nhưng theo chuẩn SEO. Mình cần tên của A trong URL. Và vì thế chúng ta hãy xem xét một số cách để thực hiện việc này.

Cách tiếp cận đơn giản

Phương pháp đơn giản nhất là ghi đè phương thức to_param ở trong model Person. Bất cứ khi nào chúng ta gọi một đường dẫn như thế này:

person_path(@person)

Rails sẽ gọi to_param để chuyển đối tượng đến một slug cho URL. Nếu trong model bạn không định nghĩa phương phức đó thì nó sẽ chỉ trả về id.

Cho nên là hãy cùng định nghĩa phương thức to_param như sau:

class Person < ActiveRecord::Base
  def to_param
    [id, name.parameterize].join("-")
  end
end

Với cách định nghĩa trên thì chúng ta sẽ tạo ra đường dẫn dạng như thế này /people/6-nguyen-van-a

Một cách định nghĩa khác đối với các model có khóa chính là trường name

Ví dụ ta có model Tag và ta định nghĩa hàm to_param như sau

class Tag < ActiveRecord::Base
  validates_uniqueness_of :name

  def to_param
    name
  end
end

Và giờ khi chúng ta gọi tag_path(@tag) , chúng ta sẽ có URL như sau /tags/ruby

Để tạo ra một Friendly URL thì vẫn còn một số cách khác. Ở phạm vi bài viết của mình chỉ mới là một số cách đơn giản và nhanh gọn.

Nguồn viết bài:

https://gist.github.com/jcasimir/1209730

http://api.rubyonrails.org/classes/ActionDispatch/Routing.html

0