Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 按子属性对Activerecord查询进行分组_Ruby On Rails_Activerecord_Grouping - Fatal编程技术网

Ruby on rails 按子属性对Activerecord查询进行分组

Ruby on rails 按子属性对Activerecord查询进行分组,ruby-on-rails,activerecord,grouping,Ruby On Rails,Activerecord,Grouping,是否可以使用子级的属性对查询进行分组 Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city') 不起作用 但是,我可以使用author.city作为条件的一部分。如果您使用的是这种情况,那么:group参数的语法是错误的,它应该是: Post.find(:all, :include => [ :author, :comments ], :group=>'authors.ci

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

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


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

如果您使用的是这种情况,那么:group参数的语法是错误的,它应该是:

Post.find(:all, :include => [ :author, :comments ], :group=>'authors.city')
确保您的:作者和:注释关联正确。如果“authors”是实际的表名,那么在Post模型中需要一个“has_one:author”关联和一个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

这将使查询正确运行,但是,现在我的结果出现错误。。。当使用:include时,:group子句似乎不适用。

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


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

作者是否应该多元化

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

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


对不起,我把问题从实际问题翻译过来了。你当然是对的。看你的编辑。。。group子句中仍然有一个冒号。您是否收到语法错误或意外结果?我的错误是“组语句”中的未知列“authors.city”。
Post.find(:all, :include => [ :authors, :comments ], :group=>'authors.city')
Post.find(:all, :include => [ :author, :comments ], :joins=>"INNER JOIN authors ON posts.author_id=authors.id", :group=>'authors.city')