Do méthodes d'association, tels que ceux définis par
has_many
etbelongs_to
utilisentActiveRecord::Relation
?Est-il possible d'obtenir le ActiveRecord :: objet Relation pour une associationSi oui, est-il possible d'obtenir l'objet
ActiveRecord::Relation
qui est utilisé.
Nous sommes tous conscients que Rails 3 est fortement ActiveRecord::Relation
utilise des objets et des objets Arel::Relation
en arrière-plan, lors de la création de requêtes à l'aide du Query Interface. Chaque fois que nous utilisons les méthodes select
, joins
, etc. de l'interface de requête, un objet ActiveRecord::Relation
est renvoyé. Cependant, cela ne semble pas être le cas lors de l'appel d'une méthode d'association d'un modèle. Au lieu de cela, la requête est exécutée immédiatement et une instance ou un tableau d'instances du modèle associé est renvoyé.
Tenir compte des modèles suivants:
post.rb
class Post < ActiveRecord::Base
belongs_to :user
end
user.rb
class user < ActiveRecord::Base
has_many :posts
end
Exemple:
u = User.first
u.posts
appel u.posts
renvoie un tableau de publications, pas une instance de ActiveRecord::Relation
. Je me demande s'il est possible d'obtenir le ActiveRecord::Relation
qui est utilisé par l'association, s'il est utilisé, peut-être en utilisant Arel::Table
?
Mon raisonnement pour vouloir le ActiveRecord::Relation
devrait être évident: C'est parce que je veux enchaîner l'association existante et manipuler la requête pour adapter à un but différent.
Aimez-le. Beaucoup plus propre! Je vous donne le CHECKMARK. Et je suis d'accord avec la documentation d'Arel. J'ai lu des bribes et des bribes partout à propos de ça. Cela semble très puissant, mais sans une bonne documentation, cela peut aussi être très ennuyeux. :) – John
Brillant, merci beaucoup! –
est-il un moyen d'appeler '.scoped' sur un tableau personnalisé que j'ai fait? – brittohalloran