2010-01-11 15 views
18

OK, he estado jugando con algunas de las cosas de carga ansiosos, y tienen 2 modelos algo como:rieles Cargando impaciente en todos los hallazgos

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

y

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

que está trabajando bien, cuando encuentro un libro de cocina, entonces la carga ansiosa las recetas, ya su vez las recetas de carga ansiosos los recipetags::

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

Pero lo que yo quiero también hacer es cada vez que abro una receta, tener que tirar de todos es asociaciones deseosas de forma automática - Básicamente quiero hacer:

rec = Recipe.find(123) 

y hacer que la carga ansiosa el: recipetags en ese caso también .

Me doy cuenta de que esto parece trivial, pero en realidad tengo alrededor de 4-5 asociaciones en Recipe, no las estoy mostrando aquí, y en lugar de tener que hacer explícitamente lo siguiente: incluir en cada llamada de búsqueda que me gustaría simplemente para que suceda Supongo que puedo anular Recipe.find para hacerlo en el modelo de Receta, pero me preguntaba si había una manera más clara ...

Respuesta

33

He estado usando default_scope hacerlo en modelos seleccionados en el que siempre quiere cargar con ganas:

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

Esto se ve bien - a pesar de que parece que está sólo disponible en 2.3 +, que introdujo algunos otros problemas en la aplicación. Veré si puedo hacer funcionar 2.3.2 y probarlo. –

+1

Esto es genial :) +1 – abhijit

0

Debería poder hacer esto con ámbitos con nombre, pero entiendo que había una serie de posibles errores con eso, con suerte ya están arreglados.

Cuestiones relacionadas