1
すべてのインターネットを読んだら、この問題を入力する必要があります。Rails 4の非永続モデルのカスタム検証
コンテキスト: 私はnon persisted Rails 4 modelそのマニュアルに従って、ActiveModel::Validations
コード含まれ、ActiveModel::Model使用している:私は作成しますとき :
class GoodnessValidator < ActiveModel::Validator
def validate(record)
if record.first_name == "Evil"
record.errors[:base] << "This person is evil"
end
end
end
class Person
include ActiveModel::Model
include ActiveModel::Validations
validates_with GoodnessValidator
attr_accessor :first_name
end
問題新しいPerson
をp = Person.new(first_name: 'Evil')
として検証する必要があります。これは「悪人」です。だから、のようなエラーアクセサーが私にすべてのエラーでHash
を返すはずです。
ただし、常に空です。p.errors
は何も返しません。決して。
[102] pry(main)> p = Person.new(first_name: 'Evil')
=> #<Person:0x007fa0925809f0 @first_name="Evil">
[103] pry(main)> p.errors
=> #<ActiveModel::Errors:0x007fa09173ac88 @base=#<Person:0x007fa0925809f0 @errors=#<ActiveModel::Errors:0x007fa09173ac88 ...>, @first_name="Evil">, @messages={}>
[104] pry(main)> p.errors.full_messages
=> []
[105] pry(main)>
逆に、検証をトリガする 'invalid?'メソッドもあります。 –
オハイオ州、良い点!あなたが正しいです、バリデータは前にインスタンス化され、有効でなければならないクラスですか? – skozz
Sunil:無効ですか?もちろん、もちろん動作します:D – skozz