J'ai l'impression que ceci est un simple problème que je suis dû à mon malentendu de la nouvelle interface de requête Activerecord, mais prenez cet exemple:
>> Category.first.recipes
=> [ ... ] # array of recipes
Toutefois:
>> Category.where(:id => 1).recipes
=> NoMethodError: undefined method `recipes' for #<ActiveRecord::Relation:0x000001033dc9e0>
Que se passe t-il ici? Pourquoi ma méthode where
renvoie-t-elle ActiveRecord::Relation
objet? Comment puis-je récupérer les objets de la requête ici?
Ceci est en fait intentionnel.
Category.where(:id => 1)
# Is Equivalent to Category.all(:conditions => {:id => 1}})
Category.where(:id => 1).first
# Is equivalent of Category.first(:conditions => {:id => 1}})
Les objets ne sont récupérés que lorsque des méthodes spéciales telles que la première, chaque etc. sont appelées. Ceci est appelé chargement paresseux qui est un excellent lorsque vous souhaitez mettre en cache votre point de vue. En savoir plus sur pourquoi ici .
Category.where(:id => 1).recipes
Retourne un tableau. Si vous faites simplement Category.where(:id => 1).first.recipes
cela devrait fonctionner.
Mais si vous faites juste un endroit où contre l'identifiant, utilisez la méthode de recherche Category.find(1)
retournera un objet de catégorie.
Donc:Category.find(1).recipes