2013-05-20 19 views
9

Ho un modello premio. Il NOMINATOR si seleziona da un elenco a discesa, quindi seleziona il NOMINEE da un altro elenco a discesa.Rails 3.2 Validation - Multiple Fields

Come è possibile disabilitare l'autocandidatura tramite una convalida nel modello? In altre parole, il nominatore non può selezionare se stesso dalla lista di selezione dei candidati.

class Award < ActiveRecord::Base 
    belongs_to :nominator, :class_name => 'Employee', :foreign_key => 'nominator_id' 
    belongs_to :nominee, :class_name => 'Employee', :foreign_key => 'nominee_id' 
    validates :nominator_id, :nominee_id, :award_description, :presence => true 
end 

Grazie in anticipo!

risposta

23

Prova questo:

class Award < ActiveRecord::Base 

    belongs_to :nominator, :class_name => 'Employee', :foreign_key => 'nominator_id' 
    belongs_to :nominee, :class_name => 'Employee', :foreign_key => 'nominee_id' 

    validates :nominator_id, :nominee_id, :award_description, :presence => true 
    validate :cant_nominate_self 

    def cant_nominate_self 
    if nominator_id == nominee_id 
     errors.add(:nominator_id, "can't nominate your self") 
    end 
    end 
end 

Questa è una convalida personalizzata. Ulteriori informazioni sulle convalide, inclusi altri modi per eseguire convalide personalizzate, sono disponibili nello Rails Guides.

+0

Questo è quello che stavo per suggerire: un metodo di convalida personalizzato. Vedi http://guides.rubyonrails.org/active_record_validations_callbacks.html#performing-custom-validations per i dettagli. – MrTheWalrus

+0

Prego. E grazie @MrTheWalrus per il commento su Rails Guides; Ho aggiunto un link. –

+0

.... aaa e il collegamento è 404. * facepalm * – pjmorse