Это может быть сложно, если вы не готовы к этому. Как вы определили, метод, который управляет отображением модели в параметрах, довольно прост, но это только половина. Позже вам придется получить его, поэтому вам нужно настроить его:
class Search < ActiveRecord::Base
before_save :assign_slug
def self.from_param(id)
self.find_by_slug(id)
end
def to_param
self.slug
end
protected
def assign_slug
self.slug = self.name.gsub(' ', '-').gsub(/[^\w\-\.]/, '')
end
end
Для этого требуется добавить столбец slug
в вашу модель поиска, чтобы можно было выполнить поиск по ней. Хорошей идеей может быть добавление индекса, возможно, уникального, для более эффективного извлечения их позже.
В вашем контроллере вы не используете find
, а from_param
вместо этого для поиска.
Вам также необходимо добавить собственный маршрут, который принимает этот параметр:
match '/cars/:search', :to => 'cars#index', :as => 'cars_search'
В качестве примечания вы должны по возможности использовать методы генератора маршрута, поскольку несколько маршрутов могут соответствовать одним и тем же параметрам. Например:
redirect_to cars_search_path(:search => search)