mon problème est le suivant. Comment puis-je belongs_to association de se joint modèle polymorphesRails rejoint ou précharge appartient à l'association du modèle polymorphe
Il y a la situation
opinion.rb
class Opinion < ActiveRecord::Base
belongs_to :opinionable, :polymorphic => true
belongs_to :category
end
answer.rb
class Answer < ActiveRecord::Base
has_many :opinions, :as => :opinionable
end
Comment puis-je faire suivant
Opinion.joins(:opinionabe).all
il lancera
ArgumentError: You can't create a polymorphic belongs_to join without specifying the polymorphic class!
Comment puis-je précise quelle classe je veux rejoindre?
Deuxième question. Comment le précharger?
Opinion.preload(:opinionable).all
fonctionne très bien. Il fera une requête pour chaque classe dans belongs_to.
Mais. si je veux faire quelque chose comme
Opinion.preload(:opinionable => :answer_form).all
il y a un problème car un modèle a cette association et la seconde n'a pas. Donc, il va jeter l'exception.
Alors, comment je peux faire quelque chose comme
Opinion.preload(:answer => :answer_form, :another_belongs_to_model).all
?
Merci, David!
Polyporhic fonctionne bien pour moi (et la colonne id ont le type dans le tableau). Vous avez votre explication pourquoi les jointures ne fonctionnent pas. J'ai manqué ce fait que le modèle ne sait pas quelles classes sont dans belongs_to. – Schovi
Avoir une idée. Est-ce possible quelque chose comme ça f je connais la classe Opinion.joins ([: opinionable, Answer])? – Schovi
Si vous connaissez la classe concrète, vous pouvez ajouter quelque chose comme: 'belongs_to: opinionable_answer,: foreign_key =>: opinionable_id,: class_name =>" Answer "' dans le modèle 'Opinion'. Et puis 'Opinion.joins (: opinionable_answer)' devrait fonctionner correctement. –