2014-04-28 46 views
1

我的用户have_many与他们相关的投资(模型)。我需要做的是每月计算他们所有的:(投资模型中的一列)的总和(我将在下面讨论)。Rails:根据不同的字段类型计算多个结果的总和

在我控制器,我有:

#get Investment types that are Roth IRAs, Traditional IRAs, etc. 
    @getira = Investment.where(user_id: current_user, investmenttype: ["Roth IRA","Traditional IRA","Other"]) 

通常我只想补充的.sum(:捐款)到该查询。但是,并非所有的贡献都是平等的。

的投资也有:contributionfrequency场,这是在用户选择“月刊”的字符串,“季度”或“每年”

所以我在同一控制器添加下面这一点:

investment = @getira.find(params[:contributionfrequency]) 

    # evaluate IRA contribution frequency 
    if investment.contributionfrequency == "Quarterly" 
     @contribution_quarterly = (investment.contribution.to_i * 4)/12 
    elsif investment.contributionfrequency == "Monthly" 
     @contribution_monthly = investment.contribution.to_i 
    elsif investment.contributionfrequency == "Annually"   
     @contribution_annually = investment.contribution.to_i * 12 
    end 

当我这样做,我得到这个错误:

没有ID找不到投资

我不确定是否进行了正确的查询,或者如果我没有在这里传递正确的字段。

回答

0

您必须在下一行

investment = @getira.find(params[:contributionfrequency]) 

收到错误Couldn't find Investment without an ID这只是意味着params[:contributionfrequency]nil即,你有没有在params传递的键:contributionfrequency

按照与OP聊天会话,params[:contributionfrequency]取出并使用直接查询:

@contribution_quarterly = Investment.where(user_id: current_user, investmenttype: ["Roth IRA","Traditional IRA","Other"], contributionfrequency: ["Quarterly"]).sum(:contribution) 
@contribution_monthly = Investment.where(user_id: current_user, investmenttype: ["Roth IRA","Traditional IRA","Other"], contributionfrequency: ["Monthly"]).sum(:contribution) 
@contribution_annually = Investment.where(user_id: current_user, investmenttype: ["Roth IRA","Traditional IRA","Other"], contributionfrequency: ["Annually"]).sum(:contribution) 
+0

我怎么通过的关键在于:contributionfrequency params中? – beaconhill

+0

让我们来聊聊聊聊http://chat.stackoverflow.com/rooms/48530/ror –

相关问题