2012-03-03 11 views
0

で、私は次のモデルを持っていると私はエラーを取得するこのRails Validates Prevents Savepassword_requiredの適切な場所を判断しますか? before_saveパスワードの暗号化

class User < ActiveRecord::Base 
    before_save :encrypt_password 
    validates :password, :presence => true, 
        :confirmation => true, 
        :length => { :within => 4..12 }, 
        :if => :password_required? 

    def password_required?   
    self.new_record? or self.password? 
    end 

    # 
    # where we encrypt on creation 
    # 
    def encrypt_password 
    if password.present? 
     self.password_salt = BCrypt::Engine.generate_salt 
     self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
    end 
    end 

を使用してUserモデルのためのパスワード検証をオフにしようとしている:私はちょうど

undefined method `password?' for #<User:0x007fc8e0473be0> 

べきself.password_hashを確認しますか?パスワードを更新するための別のフォームがあります。そのインスタンスで検証を無効にするための最良の戦略は何ですか?あなたは、あなたのユーザモデルにこれを追加する必要があります

THX

答えて

1

attr_accessor :password 

ユーザーモデルにパスワード属性を与えるだろう - しかし、それはデータベースに永続化したり、アプリケーションに覚えていませんいずれにしても。塩とハッシュだけが保存されます。

パスワードを取得するには?あまりにもあなたのモデルで、次の操作を行います。あなたはgimpyブールフィールドのようなpassword?を使用することができます

attr_accessor :password 
alias :password? :password 

:それは何かを返した場合、パスワードは設定されています。それ以外の場合、パスワードは設定されていません。

+0

thxこれは意味がありますが、まだ未定義のメソッドのパスワードを取得していますか? #のために。レールでNoob。 self.passwordの構文は?オフ – timpone

関連する問題