J'ai un tableau d'objets, appelons-le "tableau". Indicator
. Je veux exécuter les méthodes de la classe Indicator (celles de la classe def self.subjects
variété, scopes, etc) sur ce tableau. Le seul moyen que je connaisse pour exécuter des méthodes de classe sur un groupe d'objets est de faire en sorte qu'ils soient des ActiveRecord::Relation. Je finis donc par ajouter un to_indicators
pour Array
.
def to_indicators
# TODO: Make this less terrible.
Indicator.where id: self.pluck(:id)
end
Parfois, j'enchaîne plusieurs de ces scopes pour filtrer les résultats, dans les méthodes de la classe. Ainsi, même si j'appelle une méthode sur un ActiveRecord::Relation, je ne sais pas comment accéder à cet objet. Je ne peux accéder à son contenu que par le biais de all
. Mais all
est un tableau. Je dois donc convertir ce tableau en ActiveRecord::Relation. Par exemple, ceci fait partie d'une des méthodes :
all.to_indicators.applicable_for_bank(id).each do |indicator|
total += indicator.residual_risk_for(id)
indicator_count += 1 if indicator.completed_by?(id)
end
Je suppose que cela se résume à deux questions.
- Comment convertir un Array d'objets en ActiveRecord::Relation ? De préférence sans faire un
where
à chaque fois. - Lors de l'exécution d'un
def self.subjects
sur un objet ActiveRecord::Relation, comment puis-je accéder à cet objet ActiveRecord::Relation lui-même ?
Merci. Si je dois clarifier quelque chose, faites-le moi savoir.