2011-04-30 62 views
0

我有一个嵌套的形式。该表单是一个名为list的模型,它具有:name和a:month属性。这个列表模型在被调用的项目中嵌入了另一个模型,它具有:name和:amount属性。一个列表有很多项目,一个项目属于一个列表。我创建了我的控制器,总计所有的项目数量这样的变量(不知道这是最好的方式):显示来自Rails 3中不同条目的变量值?

@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

您的用户模型与List具有belongs_to关系吗?列表是否与用户有has_many关系?另外,您可能想使用created_at来排序查询,而不是id。 Id不一定是按时间顺序排列的,而created_at总会是。 – ipd 2011-04-30 15:39:02

回答

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

它工作得很好!

1

你或许应该提出这个逻辑到你的列表模型,并在那里建立一个TOTAL_AMOUNT访问,如:

def total_amount 
    Item.where(:list_id => self.id).sum("amount") 
end 

然后在你的控制器,你只需要前面的列表加载到一个@previous_list变量。

在你的意见,你会那么能够做到:

<%= @list.total_amount %> 
<%= @previous_list.total_amount %> 

伊恩。

+0

感谢您的快速反馈。对不起,也许愚蠢的问题,但我在哪里以及如何定义@list和@previous_list变量? – FattRyan 2011-04-30 06:24:57

+0

好问题!这很可能会在你的控制器'show'中执行。你究竟如何实现它取决于你的意图,你想要加载的是以前的列表?你以前的意思是什么? – ipd 2011-04-30 06:31:44

+0

谢谢,我几乎在那里,但仍然错过了一些东西。我把它放在上面的编辑中。 – FattRyan 2011-04-30 07:09:02