2012-03-23 135 views
0

自升級到Rails 3.2後,我遇到了一個奇怪的問題。嵌套的對象和集合大小

我的應用程序有一些使用nested_forms進行管理的對象,但是當我嘗試在構建新的嵌套對象後達到集合的大小時,嵌套的對象被帶入count。

對於前:

1.9.3p0 :004 > e = Expense.last 
    Expense Load (22.6ms) (...) 
=> #<Expense id: 1, (...) 
1.9.3p0 :005 > e.comments.size 
    (0.3ms) SELECT COUNT(*) (...) 
=> 0 
1.9.3p0 :006 > e.comments.build 
=> #<Comment id: nil, content: nil, commentable_id: 1, commentable_type: "Expense", created_at: nil, updated_at: nil, creator_id: nil> 
1.9.3p0 :007 > e.comments.size 
=> 1 

在這種情況下,我希望因爲Comment對象尚未保存的e.expense.size返回0。

回答

0

構建評論創建... 1條評論。它不存在於數據庫(尚未),所以e.commment.count將返回0,但它存在於應用程序中,所以size返回1.所以這種說法是有道理的。

但我確實看到這裏有一個可能意想不到的結果。如果內存中不存在註釋,它看起來像Rails檢查數據庫(SELECT COUNT(*)...),而如果它在內存中找到一個它不會。

我想知道如果你有幾個現有的評論會發生什麼,然後在那種情況下檢查e.comments.size

你從哪個版本的Rails來工作不同?

+0

也許這不是自升級以來,也許我只是沒有注意到它之前。事實是,當我打電話給e.comments中的評論時,我進入了這種行爲,並且由於剛剛構建的評論尚未保存,因此也引發了一些錯誤 – AkyRhO 2012-03-23 13:35:01