9

ho le seguenti due (stilizzati igienizzati /) modelli:Rails Unire errori bambino con errori controllanti

class DrivingExam < ActiveRecord::Base 
    belongs_to :dmv_rules 
    has_many :invigilator_assignments, as: :assignable 
    has_many :invigilator, through: :invigilator_assignments 

    validate do |record| 
    record.invigilator_assignments.each do |i| 
     next if i.valid? 
     i.errors.full_messages.each do |msg| 
     errors.add_to_base(msg) 
     end 
    end 
    end 
end 



class InvigilatorAssignment < ActiveRecord::Base 
    attr_accessible :invigilator_id 

    belongs_to :assignable, polymorphic: true 
    belongs_to :invigilator 

    validates :invigilator_id, presence: true 

    validates_each :invigilator do |record, attr, value| 
    if record.assignable.is_a?(DrivingExam) && !value.no_scheduling_conflicts? 
     record.errors.add attr, "This Invigilator has a scheduling conflict" 
    end 

    end 
end 

Questi vengono chiamati dal DrivingExamController per mezzo di:

if @driving_exam.save 

L'atteso il comportamento è che il modello deve restituire false sulla convalida e unire i messaggi secondari all'hash degli errori padre e inoltrarli al controller.

Quello che succede invece è che la pagina non riesce a salvare (questo è buono) con un 422 (questo è strano) e non passa i messaggi.

Aggiungendo puts dichiarazioni tutto il codice di cui sopra, ho stabilito che:

1) La condizione if all'interno validates_each ha successo, e l'array record.errors è quindi impostato all'interno del modello InvigilatorAssignment.

2) Nel ciclo validate do l'assegnazione sorvegliante è valido e non ha errori

3) il ciclo validate do viene eseguito prima della validates_each ciclo

Quindi la domanda è: come faccio a garantire che le DrivingExam Convalida InvigilatorAssignment e unisce i suoi messaggi di errore sul proprio hash dell'errore.

+0

'' 'errors.add_to_base''' è stato rilasciato da Rails 3.0 e versioni successive e deve essere sostituito con: ' '' errors [: base] << "Errore studente: # {msg}" '' ' – mahatmanich

risposta