gpt4 book ai didi

ruby-on-rails - 连接表上的 Default_scope

转载 作者:行者123 更新时间:2023-12-04 13:43:51 27 4
gpt4 key购买 nike

我有一个如下所示的模型设置:

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 方法是什么?一个存在吗?

最佳答案

在#ruby-on-rails 的 dfr 的帮助下找出答案。

在 User 类中,将 has_many 关系设置为:

 has_many :words, :through => :items, :conditions => { "items.active" => true }

这是因为虽然 User 和 Word 之间存在 habtm 连接关联,但在调用 user.words 时实际上并未加载 Item 模型。因此,您必须在 User 模型中的关联上应用范围。

希望对某人有所帮助。

关于ruby-on-rails - 连接表上的 Default_scope,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463385/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com