-1

J'ai la configuration suivante:Essayer de se référer à l'auto dans un périmètre de has_many dans des rails 5

class TeamEnrollment < ApplicationRecord 
    belongs_to :team 
    has_many :term_enrollments, through: :team 
end 

Le code ci-dessus fonctionne très bien. Maintenant, je dois changer la ligne has_many pour ressembler à ceci:

has_many :term_enrollments, 
    -> {where("(term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?) OR (term_enrollments.term_start_date >= ? AND term_enrollments.term_end_date > ?) OR (term_enrollments.term_start_date <= ? AND term_enrollments.term_end_date >= ?)", self.start_date, self.start_date, self.start_date, self.termination_date, self.termination_date, self.termination_date)} 
    , through: :team 

À partir du code ci-dessus, je suis l'erreur suivante si j'essaie de faire TeamEnrollment.first.term_enrollments:

undefined method `start_date' for #<TermEnrollment::ActiveRecord_Relation:0x007ff706550550> 

J'ai testé la clause where avec la première configuration de code ci-dessus et cela fonctionne bien. Ce n'est que dans la clause has_many que cela ne fonctionne pas. Je suis assez sûr que cela a à voir avec l'utilisation de soi à l'intérieur de la has_many through. J'essaie de me référer à start_date de TeamEnrollment. Comment puis-je faire cela?

Répondre

0

La section de documentation sur les étendues has_many montre l'exemple suivant:

has_many :posts, ->(blog) { where("max_post_length > ?", blog.max_post_length) } 

Cet exemple montre que le scope peut prendre un paramètre qui est le dossier, il est appelé à