Je les modèles suivants:champ validates_uniqueness_of scope à une relation has_one
class Section < ActiveRecord::Base
belongs_to :course
has_one :term, :through => :course
end
class Course < ActiveRecord::Base
belongs_to :term
has_many :sections
end
class Term < ActiveRecord::Base
has_many :courses
has_many :sections, :through => :courses
end
Je voudrais être en mesure de faire ce qui suit dans mon modèle Section
(call_number
est un champ Section
):
validates_uniqueness_of :call_number, :scope => :term_id
Cela ne fonctionne évidemment pas parce que Section
n'a pas term_id
, alors comment puis-je limiter la portée au modèle d'une relation?
J'ai essayé de créer un validateur personnalisé pour Section
sans résultat (ne fonctionne pas lorsque je crée une nouvelle Section
avec l'erreur « méthode non définie « sections » pour nulle: NilClass »):
def validate_call_number
if self.term.sections.all(:conditions => ["call_number = ? AND sections.id <> ?", self.call_number, self.id]).count > 0
self.errors[:base] << "Call number exists for term"
false
end
true
end
Merci beaucoup!
'term' semble toujours être" nul "avant une sauvegarde. Je pense que c'est parce que 'term' n'est disponible que pour la' section' à travers une relation. – zsalzbank
@zsalzbank cela dépend si vous avez assigné un 'Course' à cette section. Si vous avez assigné un 'Course' à' Section' et que 'Course' a un' Term' 'self.term' ne devrait pas être nul même si l'instance de section est un nouvel enregistrement. – Fabio