我有一個模型設置如下所示:Default_scope基於連接表
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的方式來獲取連接表範圍工作之間的關聯,而無需指定它?有一個存在嗎?
我同意。似乎應該在調用關聯時加載連接模型。我認爲這不是爲了優化。不過,我認爲連接模型是放置該範圍的正確位置,而不是讓它掛在用戶模型中的has_many方法。 – joeellis 2011-03-29 21:07:47