2009-11-22 24 views
0

我正在處理用戶創建條目的RoR應用程序。這些條目具有價格,表示作爲收入或費用的條目的布爾值,以及通過acts_as_taggable_on插件標籤。用戶act_as_taggers,所以我可以將所有權應用於標籤。當前用戶總數標籤

我正在嘗試查找具有最高總和(收入條目 - 費用條目)的用戶標籤以及總額最低的標籤。

現在我能找到該用戶已創建的所有標籤:

@all_tags = current_user.owned_tags 

我就能夠去通過每個用戶的條目,標籤由標籤,並創建陣列的價格爲每個標籤的款項:

@tag_groups = Array.new 
for tag in @all_tags 
    entries_tagged_with_tag = current_user.entries.tagged_with(tag) 
    @tag_groups << entries_tagged_with_tag.sum('price') 
end 

這讓我總結出的價格爲每個標籤,但後來我失去了一個與該款項有關的標記名稱。

但是,這裏有一個相當大的問題:一個條目價格本身並不意味着條目是收入還是支出。每個條目都有一個'is_income'字段;真正的意思是入場是收入,而虛假意味着入場是一種開銷。因此,總的標籤其實是僞代碼:

all_incomes_with_tag(tag) - all_expenses_with_tag(tag) 

的信息我期待在我看來,以顯示爲:標籤名稱,相關條目,和總價數。我想爲最大費用標籤和最大收入標籤顯示此信息。

我希望我已經提供了足夠的信息。任何幫助,即使只是朝着正確的方向,將不勝感激!


UPDATE

我已經取得了一些進展。這是我目前的控制器:

@all_tags = current_user.owned_tags 
    @tag_groups = Array.new 
    for tag in @all_tags 
     income_entries_tagged_with_tag = current_user.entries.tagged_with(tag, :conditions => ['is_income = ?', true]) 
     expense_entries_tagged_with_tag = current_user.entries.tagged_with(tag, :conditions => ['is_income = ?', false]) 
     all_entries_tagged_with_tag = current_user.entries.tagged_with(tag) 

     tag_total_income = income_entries_tagged_with_tag.sum('price') 
     tag_total_expense = expense_entries_tagged_with_tag.sum('price') 
     tag_total = tag_total_income - tag_total_expense 

     @tag_groups << { :total_price => tag_total, :tag_name => tag.name, :number_of_entries => all_entries_tagged_with_tag.count } 
    end 

這是我的觀點:

<% @tag_groups.sort_by { |tag| tag[:total_price] }.each do |tag| %> 
    <p><%= tag[:tag_name] %> &mdash; <%= number_to_currency(tag[:total_price]) %> (<%= tag[:number_of_entries] %>)</p> 
<% end %> 

這給了我下面的輸出:

food — $-32.50 (1) 
lunch — $-32.50 (1) 
coffee — $-32.50 (1) 
business — $-32.50 (1) 
development — $930.00 (1) 
groceries — $930.00 (1) 
babies — $930.00 (1) 
second tag — $933.45 (1) 
first tag — $933.45 (1) 
personal — $1,022.00 (2) 

我覺得我幾乎沒有...

回答

0

我不熟悉有問題的插件。但是,如果@tag_groups是您用來訪問您需要的屬性的集合,那麼您目前所做的所有操作都是以#sum('price')值發送的。

您將需要確保您的集合獲取您想要在視圖中訪問的所有數據。

@tag_groups << {"tag_name" => ..., "no_of_ass" => ..., "total" => ...} 

Hash {}總是很好,因爲它是一個key:value對,但如果要爲它建立索引,array []很好。