Подтвердить что ты не робот

Rails Eager Loading on All Finds

Хорошо, я играл с некоторыми загружаемыми вещами, и у меня есть 2 модели:

Class Recipe < ActiveRecord::Base
    belongs_to :cookbook
    has_many   :recipetags
end

и

Class Cookbook < ActiveRecord::Base
    has_many :recipes, :include => [:recipetags]
end

Что хорошо работает, когда я нахожу Cookbook, то я охотно загружаю рецепты, и, в свою очередь, рецепты ожидают загрузки: recipetags:

cb = Cookbook.find(10590, :include => [:recipes])

Но то, что я хочу делать, - это всякий раз, когда я открываю рецепт, он автоматически втягивает все его нетерпеливые ассоциации - в основном я хочу сделать:

rec = Recipe.find(123)

и в этом случае он также будет загружать: recipetags.

Я понимаю, что это кажется тривиальным, но на самом деле у меня около 4-5 ассоциаций на рецепте, я просто не показываю их здесь, а вместо того, чтобы явно делать: включать в каждый поиск, который мне нужен просто случиться. Я предполагаю, что могу переопределить Recipe.find, чтобы сделать это в модели рецепта, но задавался вопросом, был ли более чистый способ...

4b9b3361

Ответ 1

Я использую default_scope, чтобы сделать это на некоторых моделях, где я всегда хочу получать нагрузку:

class Post < ActiveRecord::Base
  has_many :comments
  default_scope :include => :comments, :order => ["title ASC"]
  ...
end

Ответ 2

Вы должны иметь возможность сделать это с помощью названных областей, но я понимаю, что с этим было множество ошибок, надеюсь, что все они исправлены.