我有一个嵌套的表格。表单是一个名为list的模型,它具有:name和a:month属性。此列表模型具有嵌套在名为item的内部的另一个模型,其具有:name和:amount属性。列表包含许多项目,项目属于列表。我在我的控制器中创建了一个变量(不确定这是否是最佳方式),总计所有项目金额如下:
@amount_total = Item.where(:list_id => @list).sum("amount")
我在列表显示页面中调用此变量,它显示当前列表ID的所有项目金额的总和。我想要做的是能够将当前列表总数与先前输入的列表进行比较。是否可以使用这样的变量?如果是这样,怎么样?如果没有,我该怎么办?
编辑
在我在控制器中的节目动作中,我有以下内容(基于以下答案):
@list = List.find(params[:id])
但我需要创建变量@previous_list,如下所示:
@previous_list = List.order("id").where("id<? AND user_id=?", self.id, self.user_id).last
我需要找到以前输入的列表,但是对于同一个用户。但是,当我以这种方式使用变量时,它表示存在未定义的方法“user_id”。想法?
答案 0 :(得分:1)
您应该将此逻辑移动到List模型中,并在其中创建total_amount访问器,例如:
def total_amount
Item.where(:list_id => self.id).sum("amount")
end
然后在你的控制器中你只需要将前一个列表加载到@previous_list变量中。
在您的观看中,您将能够:
<%= @list.total_amount %>
<%= @previous_list.total_amount %>
伊恩。
答案 1 :(得分:0)
ipd的回答让我最接近解决方案,以下是我如何根据我的具体情况完成它:
显示上一个列表总数 - 列表助手:
def prev_total(list)
list and list.items.sum("amount")
end
在list.rb模型中:
def previouslist
self.class.order("id").where("id<? AND user_id=?", self.id, self.user_id).last
end
然后在我的列表show.html.erb文件中:
<%= prev_total(@list.previouslist) %>
效果很好!