查询,无法选择列数
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
结果:
[#, ... , #]
它不会为我返回计数列。 我怎么才能得到它?
您是否尝试在其中一个返回的Tag
对象上调用count
方法? 仅仅因为inspect
未提及count
并不意味着它不在那里。 inspect
输出:
[#, ... , # ]
只包含Tag
类知道的内容, Tag
只会知道tags
表中的列:你只有表中的id
和name
,这就是你所看到的。
如果你这样做:
tags = Tag.joins(:quote_tags).group('quote_tags.tag_id').order('count desc').select('count(tags.id) AS count, tags.id, tags.name')
然后看看count
:
tags.map(&:count)
您将看到您期望的计数数组。
更新:这个答案的原始版本错误地表征了select
和后续版本最终有效地重复了@muistooshort的另一个答案的当前版本。 我将它留在当前状态,因为它有关于使用原始sql的信息。 感谢@muistooshort指出我的错误。
虽然您的查询实际上正如另一个答案所解释的那样工作,但您始终可以执行原始SQL作为替代方法。
你可以选择各种各样的select_...
方法,但我认为你想要使用select_all
。 假设您隐式生成的构建查询是正确的,您可以使用它,如:
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')
有关可以选择的各种方法的信息,请参阅http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html 。
- 如何按照has_many关系中的对象数对Rails AR.find进行排序
- 如何在Active Record中检索批量插入的已创建ID列表?
- 将SQL文件导入Rails 4 ActiveRecord db?
- Ruby on Rails Active Record RANDOM()在循环中始终相同
- Rails 3 ActiveRecord where子句设置的子句或null
- Rails 3.1 named_scope
- Rails belongs_to association(with:class_name)返回nil
- GROUP_BY内的活动记录限制
- Rails 3忽略Postgres唯一约束exception