J'ai trois modèles, User, Type et TypeDescription, et comme vous pouvez le voir ci-dessous, chaque utilisateur peut avoir plusieurs types, mais chaque type a une seule description. Donc comme optimisation, Je pensais que chaque TypeDescription devait être jointe avec Type via JOIN en sql, donc j'ai utilisé default_scope et defined join, et cela fonctionne quand je reçois un type via Type.find (id), mais quand j'utilise user = User. find (1), chaque type de user.types n'a pas de données de TypeDescription, car default_scope ajoute simplement des options définies à des méthodes comme find, all etc. Donc ce que je cherche est une solution pour que cela fonctionne dans ma situation, Donc, ce que je veux, c'est quand j'obtiens certains ou tous les utilisateurs, je veux avoir tous les types d'utilisateurs et chaque type devrait avoir des données de TypeDescription.Rails, has_many et joint
donc, le code est:
class User
has_many :types
end
class Type
has_one :type_description
default_scope :joins => :type_description
end
class TypeDescription
belongs_to :type
end
Merci!
mais c'est plus rapide si je joignais TypeDescription à chaque type, dans les deux cas, il y a deux requêtes, mais rejoindre est plus rapide que deux requêtes ... – mfolnovich
alors, ce que je veux, c'est générer deux requêtes. find (1,: include => [: types]) SELECT * FROM utilisateurs WHERE id = 1; SELECT * FROM types types JOIN type_descriptions ON types.id = type_descriptions.id O WH 'id' IN (1, 3, 5); – mfolnovich
vous faites User.find (1,: include => {: types =>: type_descriptions}) cela va générer 3 requêtes, et c'est ok ... tout ce que vous voulez faire est d'optimiser les requêtes N + 1 à 3 , 3 est assez bas :) – amitkaz