(Обратите внимание, что примеры являются упрощением моего варианта использования.)
У меня есть модель Событие и маршрут по умолчанию для отображения одного события:
/events/:id(.:format) ----> activities#show
Теперь у события есть атрибут с именем year, и я также уже принимаю следующий маршрут:
/events/:year/:id(.:format) ----> activities#show
Поскольку по умолчанию используется второй вариант, я хочу, чтобы код, подобный redirect_to @event
, приводил пользователя к этому варианту (например, http://localhost:3000/events/2012/1).
Где я могу это определить?
До сих пор я пытался переписать to_param
в модели следующим образом:
def to_param
"#{self.year}/#{self.id}"
end
... но это приведет к заполнению строки params[:id]
2012/1 .
Я хочу, чтобы params[:id]
все еще было 1 , в то время как params[:year]
должно быть 2012 .
Предоставляет ли Rails стандартный способ сделать это?
... или мне придется написать собственный метод для модели и вызвать его, выполнив что-то вроде этого: redirect_to @event.custom_method_to_create_long_url_variant
Такой метод будетбыстро реализуется, но если Rails может обработать требование с помощью простой настройки, это позволит мне оставить практически весь остальной код без изменений.
РЕДАКТИРОВАТЬ:
Я нашелвыяснилось, что мои params
содержали значения (: id и: year), как и ожидалось, при изменении get в функциональном тесте ОТ get :show, id: @event
К get :show, id: @event.id
.
Теперь вопросэто:
Это просто способ сделать это или я все еще могу поддерживать get :show, id: @event
?