自从我升级到Rails 3.2后,我遇到了一个奇怪的问题。
我的应用程序有一些使用nested_forms管理的对象,但是当我在构建新的嵌套对象后尝试达到集合的大小时,嵌套对象将被计入。
例如:
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
在这种情况下,我希望e.expense.size
返回0,因为Comment
对象尚未保存。
答案 0 :(得分:0)
构建评论会创建... 1条评论。它在数据库中不存在(但是),因此e.commment.count
将返回0,但它存在于应用程序中,因此size
返回1.所以这样有意义。
但我确实看到这里有一些可能意外的结果。如果内存中不存在注释,则看起来Rails会检查数据库(SELECT COUNT(*)...
),而如果它在内存中找到它则不会。
我想知道如果您已经有几条现有评论会发生什么,然后在这种情况下检查e.comments.size
?
你来自哪个版本的Rails的工作方式不同?