2

Rails 4 と Devise 3 を使用しています。「名前」のカスタム フィールドを追加しました。名前を送信すると、「許可されていないパラメーター: 名前」および「ユーザー: 電子メールに保護された属性を一括割り当てできません」というエラーが表示されます。

ユーザーコントローラーにコードを追加するように言われましたが、Devise はそれを作成しませんでした。自分で users_controller.rb を作成する必要がありますか、それとも何か不足していますか?

私の User モデルは次のようになります。

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 で単純な before フィルターを使用して行うことができます。

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 を使用した Strong パラメータから

# 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 に答える