Nachdem ich (fast) alles Internet gelesen habe, brauche ich Sie in dieses Problem eingeben.Benutzerdefinierte Validierungen für nicht persistente Modell in Rails 4
Kontext: Ich habe ein non persisted Rails 4 modelActiveModel::Model mit, dass nach seiner Dokumentation, ActiveModel::Validations
-Code enthält:
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
Problem: Als ich werde erstellen neue Person
als p = Person.new(first_name: 'Evil')
sollte validieren, die eine "böse Person" ist. Also erwarte ich einen Fehler Accessor wie p.errors
, der mir eine Hash
mit allen Fehlern zurückgeben sollte.
Aber immer ist leer, p.errors
gibt nichts zurück. Noch nie.
[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)>
Und umgekehrt gibt es auch eine 'ungültige?' Methode, die Validierung auch auslöst. –
Ohhh, guter Punkt! Sie haben Recht, Validator ist eine Klasse, die zuvor instanziiert und gültig sein muss? do it – skozz
Sunil: ungültig? funktioniert natürlich auch: D – skozz