是否可以使用子属性对查询进行分组?
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
不起作用。
但是,我可以使用author.city
作为条件的一部分。
答案 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')