2010-01-11 15 views
18

OK, Grałem około niektóre z zachłanne ładowanie rzeczy i mieć 2 modele coś takiego:Szyny Marzą Ładowanie na wszystkich Znajduje

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

i

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

Który pracuje się dobrze, kiedy znajdę Cookbook, to ja chętnie obciążenie receptur, az kolei receptur chętny załadować: recipetags:

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

Ale co chcę też zrobić, to ilekroć otwieram przepis, mieć go ciągnąć w to wszystko automatycznie jest chętny skojarzenia - w zasadzie chcę zrobić:

rec = Recipe.find(123) 

i mieć go chętnie załadowania: recipetags w tej sprawie, jak również .

Zdaję sobie sprawę, że wydaje się to banalne, ale w rzeczywistości mam około 4-5 skojarzeń dotyczących Recipe, po prostu ich tu nie pokazuję, a nie muszę jawnie robić: include przy każdym znalezieniu, które chciałbym to się po prostu stało. Zakładam, że mogę przesłonić plik Recipe.find, aby zrobić to w modelu Recipe, ale zastanawiałem się, czy istnieje czystszy sposób ...

Odpowiedz

33

Używam default_scope to zrobić w wybranych modelach, gdzie zawsze chcą chętny obciążenia:

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

To wygląda dobrze - mimo że wygląda ona dostępna tylko w 2.3+, która wprowadziła pewne inne problemy w aplikacji. Zobaczę, czy mogę uruchomić 2.3.2 i przetestować to. –

+1

To jest niesamowite :) +1 – abhijit

0

Powinieneś być w stanie zrobić to z nazwanymi zakresami, ale rozumiem, że było z tym kilka możliwych błędów, mam nadzieję, że wszystkie są teraz naprawione.

Powiązane problemy