Изменение с :Id в URL в маршрутизации Rails 3

#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. Получает проверку, потому что вы сообщили плохие новости о том, что мне приходится жестко кодировать маршрут: (