Решение Джона Смока тоже подойдет. Я склонен предпочесть следующее.
class Hamburger << ActiveRecord::Base
#this normally defaults to id
def to_param
name
end
end
class SomeModelController << ApplicationController
def show
@hamburger = Hamburger.find(params[:id]) #still default code
end
end
#goes in some view
This is the <%= link_to "tastiest hamburger ever", url_for(@hamburger) %>.
Это, грубо говоря, техника SEO (красивые URL-адреса также удобны для пользователя, и я предлагаю их абсолютно всем, даже если вы не заботитесь о SEO, например, на страницах за логином). У меня есть более расширенное обсуждение Rails SEO, которое включает в себя другие советы, подобные этому, здесь .
Важный совет: Вы должны рассмотреть во время разработки, что вы собираетесь делать, если param
изменится. Например, в моем сценарии с гамбургерами вполне возможно, что я мог бы переименовать «Sinfully Delicious Cheeseburger» в «Triple Bypass». Если это приводит к изменению URL-адресов, это может привести к некоторым последствиям, таким как разрыв пользовательских ссылок на мой веб-сайт. Соответственно, для производственного использования я обычно присваиваю этим моделям неизменный атрибут permalink
, который я инициализирую как человеческий смысл ровно один раз . Если объект позже изменяется, ну ладно, URL остается прежним. (Существуют и другие решения - это самое простое.)