0

我的 Rails 2.3 应用程序中有一个复杂的数据库模式。在某些时候,我需要通过连接多个表来进行查询以从多个列中检索数据。有一个表我总是需要通过它来检索我需要的数据。

当我尝试使用 Rails 语法进行连接时,问题就来了。我发现没有办法让 rails 一次又一次地跳过加入同一张桌子。

假设我有这个表关系:

A=>B=>C=>D=>E=>F
A=>B=>F=>G
A=>B=>F=>H
A=>I

如您所见,B 是我多次“加入”以获取所需表的表。

我的查询看起来像这样:

A.all( :select=>"SOME DATA FROM F, G, H AND I",
       :joins=>[{{{{:B=>:C}=>:D}=>:E}=>:F}, {{:B=>:F}=>:G}, {{:B=>:F}=>:H}, :I],
       :conditions=>{"SOME CONDITIONS"
                    }
     )

您可以看到我使用哈希语法来指定连接。

问题是,当我查看 rails 创建的连接时,我发现它连接了 B 3 次。我希望它足够聪明,只做一次然后从那里开始,但我想可能会有你想加入几次的情况。

我的问题是,我怎样才能使用 rails 2.3.8 语法使生成的查询只加入 B 一次。在 :belongs_to :throug 类型的模型中添加额外的关系对我来说不是一个选择

4

1 回答 1

2

尝试

A.all(:joins => [:I, { :B => [{ :F => [:G, :H] }, {:C => { :D => { :E => :F }}}]}])
于 2013-02-07T00:28:43.563 回答