我有 2 个模型类别和相关文章,如下所示:
class Category < ActiveRecord::Base
has_many :articles
end
class Article < ActiveRecord::Base
belongs_to :category
def self.count_articles_per_category
select('category_id, COUNT(*) AS total').group(:category_id)
end
end
我正在像这样访问 count_articles_per_category
Article.count_articles_per_category
这将返回包含 2 列的文章:category_id 和总计。
我的问题是总列是一个字符串。所以问题是:是否有一种方法可以将该列作为整数获取?
PS:我尝试在数据库中对 COUNT(*) 进行转换,但这没有帮助。 我尽量避免做这样的事情:
articles = Article.count_articles_per_category
articles.map do |article|
article.total = article.total.to_i
article
end
最佳答案
不,ActiveRecord
不支持自动转换数据类型(始终作为字符串传输到数据库)。
ActiveRecord 检索项目时的工作方式是:
- 对于
ActiveRecord
模型中的每个属性,检查列类型,并将数据转换为该类型。 - 对于额外的列,它不知道应该将其转换为什么数据类型。
额外列包括其他表或表达式中的列。
您可以使用不同的查询,例如:
Article.group(:category_id).count
Article.count(:group => :category_id)
它们返回 :category_id => count
的哈希值。因此,您可能会得到类似 {6=>2, 4=>2, 5=>1, 2=>1, 9=>1, 1=>1, 3=>1}
的内容。
使用 count
方法是有效的,因为它隐式地让 ActiveRecord 知道它是整数类型。
关于ruby-on-rails - 在 Rails 3 中使用 group by 查询中以整数形式获取 COUNT(column),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317850/