ユーザーモデルのインスタンスにカスタムエラーを追加しようとしていますが、validを呼び出すとどうなりますか?カスタムエラーを消去してtrueを返します。
[99] pry(main)> u.email = "test@test.com"
"test@test.com"
[100] pry(main)> u.status = 1
1
[101] pry(main)> u.valid?
true
[102] pry(main)> u.errors.add(:status, "must be YES or NO")
[
[0] "must be YES or NO"
]
[103] pry(main)> u.errors
#<ActiveModel::Errors:[...]@messages={:status=>["must be YES or NO"]}>
[104] pry(main)> u.valid?
true
[105] pry(main)> u.errors
#<ActiveModel::Errors:[...]@messages={}>
validate
モデル内からメソッドを使用すると機能しますが、この特定の検証は別のメソッド内から追加されています(パラメーターを渡す必要があります)。
User
def do_something_with(arg1, arg2)
errors.add(:field, "etc") if arg1 != arg2
end
上記の理由で、user.valid?そのエラーがインスタンスに追加された場合でも、はtrueを返します。