嵌套的对象和集合大小
问题描述:
自升级到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。
答
构建评论创建... 1条评论。它不存在于数据库(尚未),所以e.commment.count
将返回0,但它存在于应用程序中,所以size
返回1.所以这种说法是有道理的。
但我确实看到这里有一个可能意想不到的结果。如果内存中不存在注释,它看起来像Rails检查数据库(SELECT COUNT(*)...
),而如果它在内存中找到一个它不会。
我想知道如果你有几个现有的评论会发生什么,然后在那种情况下检查e.comments.size
?
你从哪个版本的Rails来工作不同?
也许这不是自升级以来,也许我只是没有注意到它之前。事实是,当我打电话给e.comments中的评论时,我进入了这种行为,并且由于刚刚构建的评论尚未保存,因此也引发了一些错误 – AkyRhO 2012-03-23 13:35:01