2008-09-24 55 views
2

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

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

不起作用。

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

回答

1

如果这就是你使用的是什么,那么语法是错误的:组参数,它应该是:

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

确保您:作者和:评论协会是正确的。如果'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子句似乎不适用。

+0

对不起,我翻译我从实际问题的问题。你当然是对的。 – sutee 2008-09-24 05:26:23

0

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

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

0

作者是否应该被复数化?

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

解决的办法是强制必要的加盟,使ActiveRecord并解决“authors.city”:

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