2011-04-30 64 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