Tengo una configuración de modelo como el siguiente:Default_scope en una tabla de unión
class User
has_many :items
has_many :words, :through => :items
end
class Item
belongs_to :user
belongs_to :word
default_scope where(:active => true)
end
class Words
has_many :items
end
El problema que estoy teniendo es que el default_scope no se está aplicando a la siguiente asociación:
user.words
en lugar de este SQL:
SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1)) AND ((`items.active = 1))
consigo este SQL en los registros:
SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1))
Me imagino que esto se debe a que el alcance predeterminado funciona para un modelo regular y su asociación secundaria, pero no para tablas de unión.
¿Cuál es la forma correcta de Rails de conseguir que un alcance de tabla de unión funcione entre asociaciones sin necesidad de especificarlo? ¿Existe uno?
Estoy de acuerdo. Parece que el modelo de unión debe cargarse cuando se llama a una asociación. Supongo que no es para optimizarlo. Sin embargo, creo que el modelo de unión es el lugar correcto para poner ese alcance, en lugar de simplemente colgar el método has_many en el modelo de usuario. – joeellis