Rails:从多个表中选择列

时间:2012-05-07 20:37:30

标签: sql ruby-on-rails

我是Rails的新手。我有三个表abc

b有2列: b1b2

c有两列:c1c2

a有3列:a1b1(外键)和c1(外键)

我希望通过为distinct

提供值来获得(b2, c2) a1

我试过像

这样的东西
a.find(:all, :joins => [:b, :c], :select => "b2, c2", :conditions => {:a => {:a1 => Time.now.midnight. ... Time.now}}, :group => "b2, c2")

这产生的SQL工作正常,我能够看到结果。但我认为,由于我正在进行a.find,因此我无法从结果集中检索b2c2

如何修改此权限,以便我可以获得b2c2

2 个答案:

答案 0 :(得分:4)

如果您将:select子句修改为:

foo = a.find(:all, 
       :joins => [:b, :c], 
       :select => "distinct b.b2 as b2_value, c.c2 as c2_value", 
       :conditions => {:a => {:a1 => Time.now.midnight. ... Time.now}}, 
       :group => "b.b2, c.c2") 

我相信你会检索一系列记录。然后尝试以下方法:

b2_value = foo.first["b2_value"]

那应该检索你要找的值。

另外,请注意在查询中我使用列表指定了表名 - 我认为这是更好的做法,并且当您有重复的列名时也会避免错误的查询(例如,{ {1}}或created_at)。

答案 1 :(得分:0)

a.find(:all, :include => [:b, :c], :select => "distinct b2, c2", :conditions ...)