Ich habe gehört zu und hat viele Beziehungen.Validiert Daten eines anderen Modells, wenn acces_nested_attributes_for verwendet wird
Das Problem ist, dass ich überprüfen muss, ob Score-Feld von verschachtelten Attributen ist weniger 0, sollte es nicht Datensätze speichern statt zurück zu Formular mit Fehlermeldung.
Der Code ich versuche ist:
class QuizAttempt < ActiveRecord::Base
has_many :quiz_answers
accepts_nested_attributes_for :quiz_answers, reject_if: :invalid_score
validate :score_greater_than_zero
private
def score_greater_than_zero
errors.add(:quiz_answers, 'must greater than 0') if invalid_score(attributes)
end
def invalid_score(attributes)
attributes['score'].to_i > 0
end
end
class QuizAnswer < ActiveRecord::Base
belongs_to :quiz_attempt
end
Das Formularfeld, wie die enthält Array aussieht:
name="quiz_attempt[quiz_answers_attributes][5][score]"
In diesem Fall ist der Grund für die Verwendung von' reject_if' ist auch grundlos? – LearningROR
@LearningROR 'reject_if' ist etwas anderes, es wird das verschachtelte Objekt nur dann nicht speichern, wenn die Bedingung erfüllt ist, während die benutzerdefinierte Validierung einen Validierungsfehler auslöst und das Formular erneut ausgeben muss. Also das sind ein paar verschiedene Dinge –
Fein, macht Sinn. Aber es scheint nicht für mich zu funktionieren. – LearningROR