2012-08-17 48 views
0

我有這個類和這些方法在裏面。方法帶回空陣列

class Purchase < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :price 
    belongs_to :unit_price 

    scope :today, lambda { joins(:unit_price, :price). 
         where(:prices => { :date => Date.today }, 
         :unit_prices => { :date => Date.today }) } 

    # not working         
    def total 
    self.price.sum(:amount) + self.unit_price.sum(:amount) 
    end 
end 

當我嘗試使用我的作用域鏈是這樣的:

<%= current_user.purchases.today.map(&:total) %> 

它給我的[]空數組結果。我真的想做到這一點。

<%= number_to_currency(current_user.purchases.today.map(&:total)) %> 

但是,這不起作用,要麼發生此錯誤。

undefined method `to_f' for []:Array 

爲什麼它會回來空?

謝謝。

+2

你怎麼會在'belongs_to'(1-關係)協會做了'sum'? – tokland 2012-08-17 17:52:42

+0

'current_user.purchases.map(&:today).map(&:total)''怎麼辦? – Max 2012-08-17 17:58:03

+1

我編輯了我的答案爲您的上一個問題http://stackoverflow.com/questions/11942377/method-gives-activerecordrelation-error/11995483 - 這是我的壞,我把'地圖'而不是'sum'。 Map返回數組,這就是爲什麼你得到數組。 – 2012-08-17 18:02:21

回答

1

您的today範圍必須將結果集減少到零。也就是說,如果current_user首先有purchases。你確定Pricedate實際上是Date嗎?你確定:prices關聯存在Purchase(雖然我猜如果它沒有的話,它可能會拋出一個NoMethodError)?

至於你的undefined method to_f for []:Array,即使你沒有使用一個空數組,你仍然試圖將你的數組作爲一個浮點數。你要sum的價格,你會得到的陣列,並傳遞到number_to_currency

number_to_currency(current_user.purchases.today.map(&:total).sum) 
+0

我正在查看數據庫,它顯示用戶確實已完成所有購買。我的價格和UnitPrice字段是名爲'date'的日期列,並且關聯在那裏。也許是因爲購買不能同時擁有price_id和unit_price_id?當我嘗試上面的內容時,它會返回0,但現在只需0.00美元。 – LearningRoR 2012-08-17 18:35:25

+0

我不明白爲什麼'Purchase' * *不應該能夠同時擁有價格和單位價格ID。我問你是否確定這些關聯是存在的,因爲在你今天的範圍內,你是在查詢':prices',而不是':price'(複數,而不是單數 - 複數表示has_many關係,單數表明'belongs_to',我只看到'belongs_to'。) – 2012-08-17 19:09:10

+0

爲了讓'今天'範圍工作,我沒有'價格'而是'價格'。在我的應用程序設計中,我決定只有一個表格(Purchase)持有價格和單價,而不是像PricePurchase和UnitPricePurchase這樣的兩個模型。我應該採取那條路線嗎? – LearningRoR 2012-08-17 19:27:28