Rails 3, Active Record requête renvoie ActiveRecord::Relation d'objet, au lieu d'objets
J'ai l'impression que c'est un simple problème, je vais avoir à cause de mon incompréhension de la nouvelle ActiveRecord interface de requête, mais prenons un exemple:
>> Category.first.recipes
=> [ ... ] # array of recipes
Cependant:
>> Category.where(:id => 1).recipes
=> NoMethodError: undefined method `recipes' for #<ActiveRecord::Relation:0x000001033dc9e0>
Ce qui se passe ici? pourquoi mon where
méthode de retour d'un ActiveRecord::Relation
objet? comment puis-je récupérer les objets de la requête ici?
Vous devez vous connecter pour publier un commentaire.
C'est en fait intentionnel.
Les objets ne sont récupérées lors de la spéciale de méthodes comme le premier, chaque etc sont appelés. Ceci est appelé le chargement paresseux qui est idéal lorsque vous souhaitez mettre en cache vos points de vue. En savoir plus sur pourquoi ici.
where
retourne ActiveRecord::Rapport, tandis que le reste retourne un Tableau ou Model.class.where.all
serait équivalent.Retourne un tableau. Si vous n'avez tout simplement
Category.where(:id => 1).first.recipes
il devrait fonctionner.Mais si vous êtes juste faire une où l'encontre de l'id, utiliser la méthode find
Category.find(1)
sera de retour d'une Catégorie d'objet.Donc:
Category.find(1).recipes