我有三个模型,User,Type和TypeDescription,如下所示,每个用户可能有很多类型,但每种类型只有一个描述。所以作为优化, 我认为每个TypeDescription应该在Sql中通过JOIN与Type连接,所以我使用default_scope和定义的join,当我通过Type.find(id)获取类型时,它工作,但是当我使用user = User.find(1)时, user.types中的每个类型都没有来自TypeDescription的数据,因为default_scope只是将定义的选项添加到find,all等方法中。所以我正在寻找的是在我的情况下有这个工作的解决方案,所以我想要的是当我得到确定或所有用户时,我希望拥有所有用户类型,每种类型都应该包含TypeDescription中的数据。
所以,代码是:
class User
has_many :types
end
class Type
has_one :type_description
default_scope :joins => :type_description
end
class TypeDescription
belongs_to :type
end
谢谢!
答案 0 :(得分:1)
如果您希望TypeDescription包含Type,则需要使用:include ,而不是:加入
答案 1 :(得分:1)
自rails 2.1以来,“include”已更改为生成多个查询而不是仅一个查询。原因是对于大型表,连接可以产生大量重复的行,从而将开销放在轨道上。
这是一个很好的article,可以找到更多信息。在你的一对一情况下,如果你仍然想要“包含”来执行“加入”,文章确实提到有一个过滤选项,但我自己找不到它。
无论如何,amikazmi是对的,表现明智,现在可能无关紧要。