是否可以使用孩子的属性对查询进行分组?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
不起作用。
但是,我可以将其author.city
用作条件的一部分。
是否可以使用孩子的属性对查询进行分组?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
不起作用。
但是,我可以将其author.city
用作条件的一部分。
解决方案是强制进行必要的连接,以便 ActiveRecord 可以解析“authors.city”:
Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')
如果这就是您正在使用的,那么 :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 子句。
查看日志文件中生成的查询 - 您通常可以将查询粘贴到您最喜欢的 MySQL 工具中以获得更详细的错误。
您实际上可能需要提供一个聚合函数来使数据库正确分组(这发生在 MySQL 中,而不是有时语法错误)。
作者是否应该包括复数形式?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')