У меня был тот же вопрос, но я не понял проблемы и нуждался в другом решении.
В моем контроллере паролей (для включения сброса пароля по электронной почте) мои параметры выглядели так:
{"email"=>"[email protected]", "code"=>"123", "password"=>"[FILTERED]", "password"=>{"email"=>"[email protected]", "code"=>"123", "password"=>"[FILTERED]"}}
Я подумал: «Почему мои параметры дублируются внутри password
», не понимая, что внешний password
исходил из имени ресурса. (Спасибо, 7stud!) Но если бы я добавил wrap_parameters false
вверху моего контроллера, чтобы сгладить параметры, я бы не смог использовать шаблон «требовать/разрешить» для сильных параметров:
#passwords_controller.rb
...
private
def forgot_password_params
params.require(:password).permit(:email, :password, :code)
end
Чтобы сделать это более разборчивым, я использовал wrap_parameters
для переименования внешней ссылки на пароль в параметрах. Код:
#passwords_controller.rb
wrap_parameters "reset"
...
private
def forgot_password_params
params.require(:reset).permit(:email, :password, :code)
end
и результирующие параметры: {"email"=>"[email protected]", "code"=>"123", "password"=>"[FILTERED]", "reset"=>{"email"=>"[email protected]", "code"=>"123", "password"=>"[FILTERED]"}}
Затем я сразу же столкнулся с соответствующей проблемой, когда для сброса пароля в приложении я передал newPassword
из своей формы, но этого не было в моих параметрах. По умолчанию параметры включают только атрибуты из модели. wrap_parameters
позвольте мне исправить и это:
#users_controller.rb
wrap_parameters :user, include: [:username, :email, :password, :newPassword]
person
Leslie Sage
schedule
26.05.2020