2

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

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

不起作用。

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

4

4 回答 4

2

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

Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')
于 2008-09-26T03:56:06.287 回答
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

和数据库模式:

 posts
   id
   author_id
 authors
   id
 comments
   id
   post_id

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

于 2008-09-24T05:19:37.680 回答
0

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

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

于 2008-09-24T05:24:49.103 回答
0

作者是否应该包括复数形式?

Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
于 2008-09-24T11:50:38.863 回答