在Rails 3中显示来自不同条目的变量值?

时间:2011-04-30 05:32:03

标签: ruby-on-rails ruby-on-rails-3 variables

我有一个嵌套的表格。表单是一个名为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”。想法?

2 个答案:

答案 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) %>

效果很好!