2012-03-23 96 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