Я чувствую, что это простая проблема, которая у меня возникла из-за моего непонимания нового интерфейса запросов ActiveRecord, но возьмем этот пример:
>> Category.first.recipes
=> [... ] # array of recipes
Однако:
>> Category.where(:id => 1).recipes
=> NoMethodError: undefined method `recipes' for #<ActiveRecord::Relation:0x000001033dc9e0>
Что тут происходит? почему мой whereметод возвращает ActiveRecord::Relationобъект? как я могу получить объекты из запроса здесь?
Решение проблемы
Это на самом деле намеренно.
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}})
Объекты извлекаются только при вызове специальных методов, таких как first, each и т. д. Это называется отложенной загрузкой, которая отлично подходит, когда вы хотите кэшировать свои представления. Подробнее о том, почему, читайте здесь.
Комментариев нет:
Отправить комментарий