Rails продублировал параметры внутри ресурса

Я использую Angular Resource и не понимаю, почему Rails продублировал параметры и поместил их в имя ресурса. Мне просто нужно понять, почему это происходит.

// post data
{"title":"asdsad"}

// rails parameters 
Parameters: {"title"=>"asdsad", "presentation"=>{"title"=>"asdsad"}}

Дублируйте, потому что добро пожаловать в Stackoverflow, где вам нужно 50 баллов для комментариев, чтобы это произошло. Мне очень жаль: AngularJS $resource отправляет дополнительный хэш регистрации? < /а>


person Yordis Prieto Lazo    schedule 28.12.2014    source источник


Ответы (2)


...если вы включили config.wrap_parameters в своем инициализаторе [проверьте файл config/initializers/wrap_parameters.rb] или [вы] вызываете wrap_parameters() в своем контроллере... параметры будут клонированы и упакованы в ключ в соответствии с именем вашего контроллера по умолчанию.

http://guides.rubyonrails.org/action_controller_overview.html#parameters http://api.rubyonrails.org/classes/ActionController/ParamsWrapper.html

Другими словами, то, что вы видите, — это способ, которым рельсы по умолчанию вводят данные в хэш params.

person 7stud    schedule 28.12.2014
comment
Большое спасибо @7stud Я не знал об этом. - person Yordis Prieto Lazo; 29.12.2014
comment
Просто возникла та же проблема, вызов wrap_parameters false в контроллере также остановит поведение на конкретном уровне контроллера. - person doz87; 09.03.2018
comment
@doz87 это именно то, что я искал. Спасибо! - person Brett Beatty; 10.07.2018

У меня был тот же вопрос, но я не понял проблемы и нуждался в другом решении.

В моем контроллере паролей (для включения сброса пароля по электронной почте) мои параметры выглядели так:

{"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