通过子属性对Activerecord查询进行分组

时间:2008-09-24 05:12:04

标签: ruby-on-rails activerecord grouping

是否可以使用子属性对查询进行分组?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city') 

不起作用。

但是,我可以使用author.city作为条件的一部分。

4 个答案:

答案 0 :(得分:2)

解决方案是强制进行必要的连接,以便ActiveRecord可以解析“authors.city”:

Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')

答案 1 :(得分:1)

如果那是你正在使用的,那么:group参数的语法是错误的,它应该是:

Post.find(:all, :include => [ :author, :comments ], :group=>'authors.city')

确保您的:author和:comments关联正确无误。如果'authors'是实际的表名,那么您在Post模型和Author模型中需要'has_one:author'关联。

协会也必须正确:

 class Post < AR:Base
   belongs_to :author
   has_many :comments
 end

 class Author < AR:Base
   has_many :posts
 end

 class Comment < AR:Base
   belongs_to :post
 end

db模式:

 posts
   id
   author_id
 authors
   id
 comments
   id
   post_id

这将使查询正确运行,但是,现在得到结果错误...:使用:include时,似乎不应用:group子句。

答案 2 :(得分:0)

查看日志文件中生成的查询 - 您通常可以将查询粘贴到您最喜欢的MySQL工具中,以获得更详细的错误。

您可能实际上需要提供一个聚合函数来使数据库正确分组(这种情况发生在MySQL而不是语法错误)。

答案 3 :(得分:0)

作者是否应该多元化?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')