2013-06-01 4 views
0

Я проверил множество подобных вопросов. В основном ответы показывают переопределение метода to_param. Но этого я не хочу.Могу ли я изменить параметр по умолчанию ': id', сгенерированный маршрутами в Rails 3?

Скажем resources: users

rake routes

edit_user GET /users/:id/edit(.:format)    users#edit 
user GET   /users/:id(.:format)     users#show 
PUT    /users/:id(.:format)     users#update 
DELETE   /users/:id(.:format) 

затем обратно к моей UsersController, я могу получить id параметров от params[:id]. Но этого я не хочу, я хочу, чтобы это было params[:user_id]. Это невозможно в соответствии с указанными выше маршрутами. Поскольку на маршруте нет параметра :user_id. Есть ли способ помочь?

+1

почему ты беспокоишься? Тогда, может быть, мы сможем помочь придумать решение. –

+0

@JesseWolgamott, потому что в моем файле маршрутов есть вложенные ресурсы с 'users' и' collections'. Когда я имел дело с коллекциями, я могу использовать ': user_id' в качестве параметра. Но когда дело доходит до «пользователей», я должен использовать «: id» в качестве параметра, чтобы найти пользователя ... он усложняется ... –

+0

Ahh. Итак, вы должны либо не использовать вложенные ресурсы, либо быть здоровыми с идеей, что ресурсы используют «идентификатор» модели для поиска модели. –

ответ

1

В целом, Rails упрощает вашу жизнь, если вы согласны с ее соглашениями и в противном случае. Поэтому я бы рекомендовал оставить это один.

Но если вы действительно хотите, чтобы быть из параметров :user_id - говорят, по причинам удобочитаемости или что-то - вы можете просто «псевдоним» это в before_filter:

params[:user_id] = params[:id] 

Надежда, что помогает!

+0

Это звучит как хороший обходной путь. –

1

Возможно, вы можете сделать что-то по умолчанию с помощью :path_prefix, у меня будет игра и обновление, если я найду способ.

Вы можете сделать это вручную, хотя при необходимости, определив отдельные матчи в маршрутах вместо того, чтобы использовать генератор ресурсов:

match 'users/:user_id/edit' => 'users#edit' 

Это разрешит URL /users/1/edit так:

Started GET "https://stackoverflow.com/users/1/edit" 
Processing by UsersController#edit as HTML 
    Parameters: {"user_id"=>"1"} 
+0

Я думаю, что для него нет простых путей ... в любом случае. Я попробую. –

Смежные вопросы