Rails,has_many和join

时间:2009-09-04 22:14:29

标签: ruby-on-rails ruby

我有三个模型,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

谢谢!

2 个答案:

答案 0 :(得分:1)

如果您希望TypeDescription包含Type,则需要使用:include ,而不是:加入

答案 1 :(得分:1)

自rails 2.1以来,“include”已更改为生成多个查询而不是仅一个查询。原因是对于大型表,连接可以产生大量重复的行,从而将开销放在轨道上。

这是一个很好的article,可以找到更多信息。在你的一对一情况下,如果你仍然想要“包含”来执行“加入”,文章确实提到有一个过滤选项,但我自己找不到它。

无论如何,amikazmi是对的,表现明智,现在可能无关紧要。