Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 查询,无法选择列计数_Ruby On Rails_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 查询,无法选择列计数

Ruby on rails 查询,无法选择列计数,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,结果: Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name') Build query: SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags` INNER JOIN `quote_tags` ON `quote_tags`.`tag_

结果:

Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name')

Build query:
SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags` INNER JOIN `quote_tags` ON `quote_tags`.`tag_id` = `tags`.`id` GROUP BY quote_tags.tag_id ORDER BY count desc

它不会为我返回计数列。如何获取它?

您是否尝试对返回的标记对象之一调用count方法?仅仅因为inspect没有提到计数并不意味着它不在那里。检查输出:

然后看看计数:


您将看到您期望的计数数组。

更新:此答案的原始版本错误地描述了select,后续版本最终有效地重复了@muistooshort中另一个答案的当前版本。我将它保留为当前状态,因为它有关于使用原始sql的信息。感谢@muistooshort指出我的错误

尽管您的查询实际上按照另一个答案所解释的那样工作,但您始终可以执行原始SQL作为替代

有各种各样的选择。。。方法你可以选择,但我想你会想用全选。假设隐式生成的生成查询是正确的,您可以使用它,如中所示:

tags.map(&:count)

有关可以选择的各种方法的信息,请参阅。

仅选择counttags.id是否有效?是的,但它只返回count Column它返回数组nil:[nil,nil,nil,…]我想要的结果是tags.id,tags.name和count。您是否尝试过调用count其他名称以确保您没有与其他名称冲突?没有,就像我的查询一样above@Peter_175你介意分享给你nil:[nil,…]结果的代码吗?@Peter_175谢谢你回复我们-你确定吗?我刚刚做了一个模型。选择“countid as count”。映射&:count并得到一个计数。我不相信您调用的count方法与SQL中的count列对应。如果我使用as foo和map&:foo,我会得到一个method not found错误,尽管它与count一起工作。是的,如果使用User.select'countid as count'。method:count you get=>我发现一件有趣的事情是,如果使用select方法将现有字段的名称用作count列名,ActiveRecord将继续并将计数结果放在它合成的记录的该字段中。实际上,它是正确的计数,将其更改为as x和&:x会产生相同的结果。请注意,User中涉及的方法之间存在差异。选择“countid作为count”。方法:count和User。选择“countid作为count”。map&:count。
[#<Tag id: 401, name: "different">, ... , #<Tag id: 4, name: "family">]
tags = Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name')
tags.map(&:count)
ActiveRecord::Base.connection.select_all('
  SELECT count(tags.id) AS count, tags.id, tags.name FROM `tags`
    INNER JOIN `quote_tags` ON `quote_tags`.`tag_id` = `tags`.`id`
    GROUP BY quote_tags.tag_id
    ORDER BY count desc')