我是Rails的新手。我有三个表a
,b
,c
b
有2列:
b1
和b2
c
有两列:c1
和c2
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
,因此我无法从结果集中检索b2
,c2
。
如何修改此权限,以便我可以获得b2
和c2
?
答案 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 ...)