可以使用rails 3访问attr_accessor

时间:2011-06-17 15:52:13

标签: ruby-on-rails ruby-on-rails-3

我在模型的顶部声明了attr_accessor:password

然后,我尝试做

validates :password, :presence => true, :length => { :minimum => 6 }, :if => (password.present? or hashed_password.blank?)

但它抛出异常并说ruby不知道密码字段

为什么?

编辑:

    class User < ActiveRecord::Base
  attr_accessor :password

  attr_accessible :name, :email, :password

  validates :name, :presence => true, :uniqueness => true
  validates :email, :presence => true
  validates :password, :presence => true, :length => { :minimum => 6 }, :if => (password.present? or hashed_password.blank?)

  before_save :encrypt_password



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

end

1 个答案:

答案 0 :(得分:4)

attr_accessible无关 - 这里的问题是你在password类方法的类上下文中调用validates,因此它没有在那里定义。

您需要提供一个lambda,Rails将验证的实例传递给:

:if => lambda { |u| u.password.present? or u.hashed_password.blank? }