使用Rails语法有效地多次连接同一个表

时间:2013-02-06 23:38:31

标签: ruby-on-rails database join rails-activerecord

我的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不是我的选项

1 个答案:

答案 0 :(得分:1)

A.all(:joins => [:I, { :B => [{ :F => [:G, :H] }, {:C => { :D => { :E => :F }}}]}])