¿Alguien sabe una forma de determinar si una asociación de Rails ha sido cargada ansiosamente?Cómo determinar si la Asociación de rieles está cargada de entusiasmo?
Mi situación: Tengo un conjunto de resultados donde a veces una de las asociaciones está ansiosamente cargada, y otras no. Si no está lleno de ansias, entonces quiero buscar asociaciones usando la búsqueda de ActiveRecord. Si está ansiosamente cargada, quiero usar detectar.
Por ejemplo, supongo que tengo una matriz "has_many" de objetos shipping_info en mi modelo de artículo. Entonces:
Si el artículo está ansioso cargado, la carga más eficiente es:
item.shipping_infos.detect { |si| si.region == "United States" }
Si el artículo no está dispuesto cargado de carga, más eficiente es:
item.shipping_infos.where(region: "United States").first
Pero a menos que sepa si está ansiosamente cargada, no sé qué código llamar para obtener el registro de manera eficiente. Si utilizo el primer método cuando no estaba ansioso de cargar, entonces tengo que buscar más registros de DB de los necesarios. Y si utilizo el segundo método cuando estaba ansioso de cargar, mis ansiosos objetos cargados se ignoran.
Gracias Bryan. Entiendo de dónde vienes. Sin embargo, este código en particular se encuentra en el parcial más frecuentemente llamado en toda nuestra aplicación, por lo que eliminar incluso microsegundos hace una diferencia medible. Le daré #loaded? un intento. – wbharding
¡Esto solo funcionará para las asociaciones has_many! En el caso de belongs_to esta llamada cargará realmente el otro objeto (por lo que siempre será cierto) – reto