Rails 3 - sélectionnez avec les Inclure?
Voici un select imbriqué dans les cas suivants:
@items = Item.where("complete = ?", true).includes( :manufacturer, {:order=>[:supplier, :agent] })
C'est une taxation requête qu'il tire 1000s de lignes de données de toutes les tables incluses.
Comment puis-je obtenir la requête pour sélectionner uniquement des domaines particuliers?
- de l'utilisateur.nom, utilisateur.created_at
- commande.created_at
- fournisseur.nom
- de l'agent.nom
- fabricant.nom
Vous devez vous connecter pour publier un commentaire.
Il y a une méthode de sélection dans ARel, mais vous devez utiliser les bons noms de table (c'est à dire le pluriel, et méfiez-vous si vous avez polymorphes modèles, ou si vous utilisez set_table_name ou d'autres non-standard de la pratique)
"Nous pouvons utiliser select avec des jointures comprend pas" - @Bhavesh_A_P
Remarque:
Comme @Bhavesh_A_P souligné ci-dessus,
select
avecincludes
ne pas produire un comportement cohérent. Il semble que si l'association ne retourne aucun résultat,select
de fonctionner correctement, si il renvoie des résultats, l'instruction select n'aura aucun effet. En fait, il va être complètement ignorés, tels que votre instruction select pourraient référence non valide les noms de table et aucune erreur ne sera produit.select
avecjoins
va produire un comportement cohérent.("name like ?", "%#{q}%"
?En fait, nous ne pouvons pas utiliser select avec des includes. Il ne peut être utilisé avec des jointures.
Le problème n'est pas résolu en ajoutant un appel à la " sélectionnez la méthode de la chaîne. Dans un semblable ActiveRecord::Relation, nous avons construit, en l'appelant "comprend" semble ignorer tout appel à "sélectionner".
Comme indiqué, la requête sélectionne toutes les colonnes.
Lorsque les 2 portées d'utilisation 'rejoint' au lieu de 'comprend', la requête fonctionne: seulement les 3 colonnes spécifiées sont sélectionnés.