我的用户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的投资
我不确定是否进行了正确的查询,或者我是否在这里传递了正确的字段。
答案 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)