Нужна помощь в решении неопределенного метода `allow 'для # - PullRequest
0 голосов
/ 26 мая 2018

Я работаю над приложением, которое использует Devise 3.2.Я пытаюсь получить некоторые дополнительные параметры при сохранении member.Согласно документации, я должен быть в состоянии сделать это.

В моем application_controller.rb у меня есть это (Rails 3.2.22.5)

before_filter :configure_permitted_parameters, if: :devise_controller?

, а затем я пробую две версиидокументация говорит, что должно работать.

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) << [:name, :site_id]
  devise_parameter_sanitizer.for(:accept_invitation) << [:name, :site_id]
end

Но это не работает, говоря devise base sanitizer expects a Block.Который, согласно документации, я должен быть в состоянии пройти, поэтому я пытаюсь это ...

def configure_permitted_parameters
  devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:name, :site_id, :email, :password, :password_confirmation) }
  devise_parameter_sanitizer.for(:accept_invitation) { |u| u.permit(:name, :site_id, :invitation_token, :password, :password_confirmation) }
end

... и это дает мне ошибку

undefined method permit for # <ActiveSupport::HashWithIndifferentAccess:0x007fbf17e00b40>

Я думаю этопотому что все находится внутри параметра: member => {...}, но я не уверен в этом и не могу понять синтаксис, если он есть.Мне просто нужно сохранить член с атрибутом name и site_id.

Параметры выглядят следующим образом

{"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"d9pudkerHaJoP7H7N1vYzWs/SSX1WtRO+8lRD313xP0=", "member"=>{"invitation_token"=>"WLh98kdrFAnyVb879EDS", "name"=>"NAMEHERE", "password"=>"XXXXXXX", "password_confirmation"=>"XXXXXXX", "site_id"=>"XXXXXXXXXXXXX"}, "commit"=>"Set my password", "action"=>"update", "controller"=>"devise/invitations"}

Может кто-нибудь помочь мне заставить это работать?Спасибо!

1 Ответ

0 голосов
/ 19 июня 2018

Метод permit явно доступен в devise, как описано в их документации, однако с ним явно что-то не так https://github.com/plataformatec/devise/blob/v3.5.4/lib/devise/parameter_sanitizer.rb#L65, поскольку ваш код определенно не работает, как и мой.

Вы также можете увидеть, почему неблокирует эту ошибку здесь: https://github.com/plataformatec/devise/blob/v3.5.4/lib/devise/parameter_sanitizer.rb#L12-L18, которая вызывает это https://github.com/plataformatec/devise/blob/v3.5.4/lib/devise/parameter_sanitizer.rb#L30-L32

Лучший способ решить эту проблему - просто использовать гем strong_parameters, которыйявляется подклассом ActiveSupport :: HashWithIndifferentAccess`, см .: https://github.com/rails/strong_parameters#migration-path-to-rails-4

Так что просто добавьте его в свой гемфайл и установите пакет:

gem 'strong_parameters'
bundle install
...