我已将 Devise 添加到我的 Rails 4 应用程序中,并成功将用户名等添加到我的用户模型中。此外,我可以使用惰性方式存储这些字段,即
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
但这并没有按预期工作(编辑操作调用时未存储用户名)。为了让它发挥作用,我还需要做其他事情吗?谢谢!
对于最新版本的 Rails 或 Devise,此答案不正确。
再一次,这是阅读手册的问题......
神奇的词是
: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
请注意,如果您使用非标准参数进行登录,则您要查找的词是
:sign_in
(如预期)。
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
用于创建新的 Devise 资源(例如用户),:account_update
用于编辑/更新资源。
第二个参数
:keys
包含您允许的参数数组。
如果你想要
nested_attributes
,:account_update
中有一个例子,你可以放入一个单独的数组,键为<object>_attributes
。
@conciliator 关于神奇词 :account_update 的说法是正确的,但这里是他提到的文档的链接 http://rubydoc.info/github/plataformatec/devise/ 搜索“devise_parameter_sanitizer”,您将看到以下内容:
Devise 中只有三个操作允许将任何参数集传递到模型,因此需要清理。它们的名称和默认允许的参数是:
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