ruby-on-rails - 强参数 - Devise 3.0.0 和 Rails 4。 "Unpermitted parameters: name"

标签 ruby-on-rails ruby devise

我目前正在使用 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)、passwordpassword_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/

相关文章:

ruby-on-rails - 日期时间对象的联合数组

ruby-on-rails - 确定 rails 是否在 Web 服务器下运行

Ruby-on-Rails 从 Rake 任务创建记录

ruby-on-rails - Rails 5,设计嵌套属性,不允许的参数

ruby-on-rails - rails 错误 : "comparison of User with User failed"

javascript - 当 html 选择/选项更改时,需要更新输入字段

ruby-on-rails - ruby 构建 : definition not found: 2. 2.1

ruby-on-rails - 使用 ActiveRecord 连接动态创建 Ruby 类

ruby - 如何配置 Ruby 以在 Windows 上为 Sench-touch 使用 compass

ruby-on-rails - 未初始化常量 SessionsController - 路由错误 + Devise + Ruby on Rails 3.1