3

我是 Rails 的新手。我有三张桌子a,,,bc

b有 2 列: b1b2

c有 2 列:c1c2

a有 3 列:a1, b1(外键) 和 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

我怎样才能修改它以便我可以得到b2and c2

4

2 回答 2

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"]

那应该检索您正在寻找的值。

另外,请注意,在查询中,我在使用它们的任何地方指定了表名和列——我认为这是更好的做法,并且当您有重复的列名(例如,created_atid)时,也可以避免错误的查询。

于 2012-05-07T22:07:17.523 回答
0

尝试

a.find(:all, :include => [:b, :c], :select => "distinct b2, c2", :conditions ...)
于 2012-05-07T21:56:02.450 回答