如何为编辑操作指定devise_parameter_sanitizer?

我已经添加了devise到我的Rails 4应用程序,并成功地添加了用户名等我的用户模型。 此外,我可以使用lazy way™存储这些字段,即

class ApplicationController < ActionController::Base before_filter :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } end end 

不过,我试过了

 def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) } end 

但是这并没有像预期的那样工作(当编辑操作调用时,用户名不被存储)。 还有什么我需要做的,为了得到这个工作? 谢谢!

再次,这是阅读手册的问题…

神奇的词是:account_update ,因此工作版本变成

 def configure_permitted_parameters devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname, :nickname) } devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :firstname, :middlename, :lastname, :nickname) } end 

请注意,如果您使用非标准参数进行login,则您要查找的单词是:sign_in (如预期的那样)。

对于Devise 4.1+

 class ApplicationController < ActionController::Base before_action :configure_permitted_parameters, if: :devise_controller? protected def configure_permitted_parameters devise_parameter_sanitizer.permit(:sign_up, keys: [:first_name, :last_name, :email]) devise_parameter_sanitizer.permit(:account_update, keys: [:first_name, :last_name, :phone, :email, bank_attributes: [:bank_name, :bank_account]]) end end 

.for方法已被弃用,现在我们使用.permit

第一个参数是动作名称。 :sign_up用于创build新的Devise资源(如用户),并且:account_update用于编辑/更新资源。

第二个参数:keys包含您允许的参数数组。

如果你想要nested_attributes ,有一个例子:account_update ,你把一个单独的数组放在<object>_attributes

@conciliator是正确的关于这个魔术字是:account_update,但这里是他提到的文档的链接http://rubydoc.info/github/plataformatec/devise/search'devise_parameter_sanitizer',你会看到以下内容:;

devise中只有三个动作,允许任何一组parameter passing给模型,因此需要消毒。 他们的名字和默认允许的参数是:

 sign_in (Devise::SessionsController#new) - Permits only the authentication keys (like email) sign_up (Devise::RegistrationsController#create) - Permits authentication keys plus password and password_confirmation account_update (Devise::RegistrationsController#update) - Permits authentication keys plus password, password_confirmation and current_password 
 def configure_permitted_parameters devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:email, :password, :password_confirmation, :current_password, :firstname, :middlename, :lastname, :nickname) } end