在Rails pectaiton上的一个简单的红宝石中,我有一个脚手架,称为"提案",其中一列是一个称为" creationyear"的字符串。我试图计算每年在加载索引页面执行以下操作时创建了多少个建议(在" proposals_controller.rb"文件中):
def index
@proposals = Proposal.all
@count2015 = Proposal.count(:all, :conditions => "creationyear = 2015")
@count2016 = Proposal.count(:all, :conditions => "creationyear = 2016")
end
以某种方式无法工作,因为它使我在两个变量上都回到了脚手架上的条目总数。
有人知道如何解决这个问题吗?我正在使用Rails v4.2.6。
谢谢!
这里的其他答案很好,但是值得提供一些背景。
自早期版本的Rails以来,在活动记录中使用count
的方式发生了变化。您可能在Rails 3或更早的情况下找到了一个例子,其中可以以您尝试的方式指定条件。
在最新版本的导轨中,count
可以使用列名来调用,例如
Person.count(:email) # number of person records that have an email address
,但在其他情况下首先创建范围,例如使用where
,然后在其上调用count
:
Proposal.where(creationyear: '2015').count
@count2015 = Proposal.where(creationyear: '2015').count
如果creationyear
是字符串,否则没有引号。
为什么不按年将建议分组?
@proposals = Proposal.group(:creationyear).count
或
@proposals = Proposal.group('creationyear').select('*, COUNT(*) as quantity')
这将使每年发生的查询减少到一个查询。