私のユーザモデルにはvalidates_confirmation_of :password
があります。問題は、ユーザーアカウントの一部の属性を更新するコメントが作成されたときにも@comment.user.save!
を実行することです。Railsはユーザの作成または更新時にのみ有効です
コメントValidation failed: Password confirmation can't be blank
を作成するときにエラーが発生します。コントローラcomments
もsave関数を呼び出しているため、:on => "save"
を私の検証に追加できません。
私はこのスレッドRails model validation on create and update onlyを読んだことがありますが、私の特定の問題には答えません。
UPDATE Userモデルスニペット:
class User < ActiveRecord::Base
attr_accessor :password
# validations
validates_presence_of :username
validates_length_of :username, :within => 6..25
validates_uniqueness_of :username
validates_presence_of :email
validates_length_of :email, :maximum => 100
validates_format_of :email, :with => EMAIL_REGEX
validates_confirmation_of :password, :if => :password_changed?
validates_presence_of :password_confirmation
validates_length_of :password, :within => 4..25, :on => :create
before_save :create_hashed_password
after_save :clear_password
private
def clear_password
self.password = nil
end
end
おそらくそれは失敗している理由は、私は 'validates_presence_of:password_confirmation'ですか?ユーザーが空白のままにしておくとチェックしないので、追加しました。また、 ':password_changed?'は定義されていません。それを定義する必要はありますか? –
パスワードは仮想フィールドなので、メソッドpassword_changed?生成されません。私はこれを修正するために私の答えを編集した、それは動作するはずです。 – cicloon
ありがとう。これはまさに私が欠けていたものです。 –