2

我正在使用 Rails 4 和 Devise 3。我添加了一个自定义字段“名称”。当我提交名称时,我收到“不允许的参数:名称”和“无法为用户批量分配受保护的属性:电子邮件”错误。

我被告知要向用户控制器添加代码,但是 Devise 没有创建一个。我应该自己创建一个 users_controller.rb,还是我在这里遗漏了什么?

我的用户模型如下所示:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable, :registerable, #:recoverable,
          :rememberable, :trackable, :validatable

  #attr_accessible :name, :password, :password_confirmation, :remember_me, :email
end

如您所见,我尝试使用 attr_accessible,但由于 Rails 4 不支持它而将其注释掉。

4

1 回答 1

1

Devise 使用自己的控制器来处理您的数据,因此您最好将额外的参数添加到这些控制器中。但是,您可以通过多种方式做到这一点


来自Devise 的 Github

如果您想允许附加参数(惰性方式™),您可以在 ApplicationController 中使用简单的前置过滤器:

class ApplicationController < ActionController::Base
  before_filter :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) << :username
  end
 end

来自Rails 和 Devise 的强参数

# config/routes.rb
devise_for :users, :controllers => {:registrations => 'registrations'}


# controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  before_filter :configure_permitted_parameters

  protected

  # my custom fields are :name, :heard_how
  def configure_permitted_parameters
    devise_parameter_sanitizer.for(:sign_up) do |u|
      u.permit(:name, :heard_how,
        :email, :password, :password_confirmation)
    end
    devise_parameter_sanitizer.for(:account_update) do |u|
      u.permit(:name,
        :email, :password, :password_confirmation, :current_password)
    end
  end

end
于 2013-11-12T09:57:23.063 回答