我有一个如下模型设置:
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
我遇到的问题是 default_scope 未应用于以下关联:
user.words
而不是这个 SQL:
SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1)) AND ((`items.active = 1))
我在日志中得到这个 SQL:
SELECT `words`.* FROM `words` INNER JOIN `items` ON `words`.id = `items`.word_id WHERE ((`items`.user_id = 1))
我认为这是因为默认范围适用于常规模型及其子关联,但不适用于连接表。
什么是让连接表范围在关联之间工作而无需指定的正确 Rails 方法?一个存在吗?