Rails готовится к загрузке всех находок - PullRequest
18 голосов
/ 11 января 2010

ОК, я поигрался с некоторыми загружаемыми вещами, и у меня есть две модели, например:

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

и

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

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

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

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

rec = Recipe.find(123)

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

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

Ответы [ 2 ]

33 голосов
/ 11 января 2010

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

class Post < ActiveRecord::Base
  has_many :comments
  default_scope :include => :comments, :order => ["title ASC"]
  ...
end
0 голосов
/ 11 января 2010

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

...