1. ホーム
  2. ruby-on-rails

[解決済み] 未定義メソッド attr_accessible

2022-02-26 12:40:42

質問

私はrailsの初心者で、ユーザーログインを作成しようとしています。 チュートリアルを見てみると ここで . 最後に大量割り当てのために "attr_accessible" を追加するように言われました。 しかし、それを実行すると、次のようなエラーが発生しました。

undefined method `attr_accessible' for #<Class:0x007ff70f276010>

私はこれを見た ポスト ActiveRecord::Baseが必要であることがわかりました。 しかし、私はそれを含んでいます。 以下は、私のユーザ・モデルのコードです。

class User < ActiveRecord::Base

  attr_accessor :password
  EMAIL_REGEX = /\A[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
  validates :username, :presence => true, :uniqueness => true, :length => { :in => 3..20 }
  validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
  validates :password, :confirmation => true #password_confirmation attr
  validates_length_of :password, :in => 6..20, :on => :create
  before_save :encrypt_password
  after_save :clear_password
  attr_accessible :username, :email, :password, :password_confirmation

  def encrypt_password
    if password.present?
      self.salt = BCrypt::Engine.generate_salt
      self.encrypted_password= BCrypt::Engine.hash_secret(password, salt)
    end
  end

  def clear_password
    self.password = nil
  end

end

この問題の原因について他のアイデアがあれば、本当に感謝します。

編集:Rails 4.1にて。 もう適用されないようです。 fotanusさんありがとうございます。

解決方法は?

Rails 4.1では大量割り当てができない

を持つ代わりに attr_accessible :username, :email, :password, :password_confirmation をモデル内で使用します。 強力なパラメータ . これはUsersControllerで行います。

    def user_params
      params.require(:user).permit(:username, :email, :password, :password_confirmation)
    end

を作成し、コントローラのアクションで user_params メソッドを呼び出します。