2014-02-21 2 views
0

Я новичок в Rails, и недавний переход к сильным параметрам Rails 4 еще больше смутил меня.Rails 4 Вложенный маршрут с сильными параметрами

Я пытаюсь настроить ссылку для подтверждения аккаунта для людей, которых нужно щелкнуть.

Я следующий маршрут создан:

rake routes 
Prefix Verb URI Pattern          Controller#Action 
     GET /users/:id/confirm/:confirmation_code(.:format) users#confirm 

В моих UserController, у меня есть confirm действия, который вызывается (я тестировал с помощью простого перенаправления в этом действии),

и вот рельсы 4 сильные параметры:

private 

def user_params 
    params.require(:user).permit(:name, :email, :password, 
           :password_confirmation, :confirmation_code) 
end 

Но я получаю следующее сообщение об ошибке при попытке доступа /users/1/confirm/foobar

param not found: user 

Я могу понять, почему я получаю эту ошибку, но я не уверен, как это исправить, не отменяя безопасность сильного Params пути удаления require(:user). Я даже не 100%, если мой базовый подход прав.

(я только что закончил Майкл Hartl в рельсах учебник и учебное пособие имеет require(:user) в контроллере пользователя, и я на самом деле не уверен, что последствия безопасности удаления его)

+0

У вас правильно настроены маршруты? – emaillenin

+0

Если у меня есть, у вас есть пользовательский контроллер и контрольный контроллер, верно? На пользователе вы должны сохранить сильные параметры, необходимые для пользовательского контроллера и сильного параметра, необходимые для подтверждения на контроллере подтверждения, а на контроллере подтверждения у вас есть доступ к пользователю как user_id. Проверьте свои маршруты, выполнив «рейк-маршруты» на своей раковине. – hmartinezd

+0

Извините, нет. У меня есть пользовательский контроллер с действием 'confirm'. Я обновил вопрос с дополнительной информацией –

ответ

2

Я думаю, что вам не нужно звонить user_params, потому что запрос - это просто запрос GET, поэтому не имеет значения, что params[:id] и params[:confirmation_code] есть. вы можете просто использовать эти параметры напрямую, независимо от того, являются ли они сильными параметрами или нет.

0

маршрута вы показали делает запрос GET, не будет params[:user], только params[:id] и params[:confirmation_code], как определено маршрутом.

params[:user] будет установлен, если вы разместили форму, созданную с form_for(@user), назад к созданному/обновленному действию.

Проблема в том, что вы каким-то образом вызываете метод user_params в действии, которое его не имеет. Сам метод выполняет свою работу точно так, как предполагалось.

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