我目前正在使用 Rails 4 和 Devise 3.0.0。我试图在注册表单中添加自定义字段“姓名”并编辑注册表单。每当我提交表单时,都会出现以下错误:
Unpermitted parameters: name
WARNING: Can't mass-assign protected attributes for User: email, password, password_confirmation.
我知道这与 Rails 4 处理参数的方式有关,但我不明白我现在应该怎么做。我四处搜索,发现我应该向涉及“参数”的用户模型添加一些行。
我的用户模型目前是这样的:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, #:recoverable,
:rememberable, :trackable, :validatable
attr_accessible :name, :password, :password_confirmation, :remember_me, :email
end
根据 How is attr_accessible used in Rails 4? ,我应该将以下代码添加到“ Controller ”。
class PeopleController < ApplicationController
def create
Person.create(person_params)
end
private
def person_params
params.require(:person).permit(:name, :age)
end
end
什么 Controller ?这是文字代码吗?由于我正在处理用户,所以我必须使用 User.create(user_params) 吗?而不是 Person.create(person_params)?
最佳答案
Rails 4 已将参数清理从模型移至 Controller 。 Devise 处理 3 个 Action ,sign_in,sign_up 和 account_update。对于 sign_up,允许的参数是 authentication key
(默认为 :email
)、password
和 password_confirmation
。
如果您想将 :name
添加到 User
模型并将其用于注册,请更改 config.authentication_keys = [ :email ]
到 /config/initializers/devise.rb
中的 config.authentication_keys = [ :name ]
或者,如果你想同时使用 :email
和 :name
,将其添加到 ApplicationController
class ApplicationController < ActionController::Base
before_action :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) << :username
end
end
同时检查- https://github.com/plataformatec/devise#strong-parameters
关于ruby-on-rails - 强参数 - Devise 3.0.0 和 Rails 4。 "Unpermitted parameters: name",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19922874/