Rails:根据不同的字段类型计算多个结果的总和

时间:2014-04-28 21:15:27

标签: ruby-on-rails ruby ruby-on-rails-4

我的用户has_many与他们相关联的投资(模型)。我需要做的是按月计算所有:贡献的总和(投资模型上的一列)(我将在下面进行讨论)。

在我的控制器中,我有:

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

通常我只会在该查询中添加.sum(:contrib)。但是,并非所有贡献都是平等的。

投资还有: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的投资

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

1 个答案:

答案 0 :(得分:0)

您必须在以下行中收到错误Couldn't find Investment without an ID

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

这仅表示params[:contributionfrequency]nil,即您尚未通过:contributionfrequency中的密钥params

根据与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)