【发布时间】:2015-08-26 02:33:05
【问题描述】:
作为 Rails 的新手,我正在学习如何实现 Devise。
为此,我从 2015 年 3 月 26 日起关注 Ilya Bodrov-Krukowski 的 this Site Point tutorial。
本教程教授的内容之一是如何创建带有附加字段的注册表单:name。
更新相关视图后,作者解释如下:
如果您使用带有 strong_params 的 Rails(在 Rails 中启用 默认情况下为 4),需要多一步:
:name属性必须被列入白名单。
他建议使用此代码:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :name
devise_parameter_sanitizer.for(:account_update) << :name
end
这工作得很好......但我的问题是我想在注册表单中添加多个新字段。
确实,我希望我的注册表单要求用户输入他们的first_name、last_name 和company_name。
我更新了我的视图,并且确实在表单中获得了正确的字段。
但是,到目前为止,我还无法将这三个属性列入白名单。
我尝试过:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :first_name, :last_name, :company_name
devise_parameter_sanitizer.for(:account_update) << :first_name, :last_name, :company_name
end
但是当我这样做时,我得到一个unexpected "," 错误。
我也试过了:
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:first_name, :last_name, :company_name) }
devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:first_name, :last_name, :company_name) }
end
但恐怕现在替换默认的设计属性(电子邮件、密码和密码确认 - 可能还有一些我忘记的其他属性),而不是简单地添加我的新属性到列表中。
所以,我的问题是:如何在不覆盖 Devise 默认属性的情况下将 first_name、last_name 和 company_name 列入白名单?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 devise attributes strong-parameters