2016-12-20 14 views
0

Ruby on Railsの単純なアプリケーションでは、「提案型」と呼ばれるScaffoldの列の1つに「creationyear」という文字列があります。それは私を与えることから、どういうわけかRuby on Rails - Scaffold上のエントリ数をカウントする

def index 
    @proposals = Proposal.all 
    @count2015 = Proposal.count(:all, :conditions => "creationyear = 2015") 
    @count2016 = Proposal.count(:all, :conditions => "creationyear = 2016") 
end 

それが動作していない:私はインデックスページは、次の(で「proposals_controller.rb」ファイルを)やってロードされたときに毎年作成されているどのように多くの提案カウントしようとしています両方の変数に足場のエントリーの総数を返します。

誰もこの問題を解決する方法を知っていますか?私はRails v4.2.6を使用しています。

ありがとうございます!

答えて

0
@count2015 = Proposal.where(creationyear: '2015').count 

creationyearが文字列の場合は、それ以外は引用符なし。

+1

パーフェクト!ありがとう!!! –

0

年単位で提案をグループ化してみませんか?

@proposals = Proposal.group(:creationyear).count 

または

@proposals = Proposal.group('creationyear').select('*, COUNT(*) as quantity') 

これは、1つのクエリへの毎年のために起こってクエリを削減します。

1

他の回答はうまくいきますが、背景を少し紹介する価値があります。

アクティブレコードでcountが使用される方法が、以前のバージョンのRailsから変更されています。あなたが試した方法で条件を指定することができたRails 3以前の例が見つかりました。

さらに最近のバージョンのRailsでは、countをカラム名などで呼び出すことができます。

Person.count(:email) # number of person records that have an email address 

が、whereを使用して、インスタンスのために、最初にスコープを作成することにより、他の例で使用され、その上countを呼び出す:

Proposal.where(creationyear: '2015').count