#ruby-on-rails #routing
#ruby-on-rails #маршруты
Вопрос:
Мальчик, это кажется проще простого, но я не могу найти это в библии маршрутизации —
Есть ли способ изменить параметр по умолчанию ‘:id’ на что-то другое, например ‘:pid’, без использования ‘match /post/:pid’? Я хочу избежать использования ‘match’, потому что он кажется особенно хрупким.
Отредактируйте, чтобы подтвердить, это будет успешным, только если я смогу сделать:
pid = params[:pid]
Выполнение:
pid = params[:id]
уже работает, но это неправильный код, потому что там нет идентификатора.
Ответ №1:
Если я вас правильно понял, проверьте это:
http://railscasts.com/episodes/63-model-name-in-url
В принципе, вы должны переопределить to_param
метод в модели:
def to_param
pid
end
И когда вы захотите извлечь объект, сделайте это в контроллере:
@object= Object.find_by_pid(params[:id])
Удачи!
Комментарии:
1. На самом деле он все равно будет использоваться
params[:id]
, а неparams[:pid]
(если вы не определяете пользовательские маршруты, используя:pid
в качестве имени параметра).2. Верно, но это неприятный запах, потому что в params[:id] есть pid, а не id. Я хочу использовать параметры [:pid], чтобы получить pid.
Ответ №2:
Вы можете определить to_param
метод в своей модели:
def to_param
pid
end
Затем все ваши сгенерированные ссылки и т.д. будет использоваться pid
вместо id
. И в вашем контроллере, params[:id]
фактически даст вам pid
, не id
.
Комментарии:
1. Тот же комментарий, что и выше — я хочу использовать params [: pid] для получения pid, а не params[:id].
2. Получает проверку, потому что вы сообщили плохие новости о том, что мне приходится жестко кодировать маршрут: (