嵌套对象和集合大小

时间:2012-03-23 12:43:45

标签: ruby-on-rails size nested-attributes

自从我升级到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对象尚未保存。

1 个答案:

答案 0 :(得分:0)

构建评论会创建... 1条评论。它在数据库中不存在(但是),因此e.commment.count将返回0,但它存在于应用程序中,因此size返回1.所以这样有意义。

但我确实看到这里有一些可能意外的结果。如果内存中不存在注释,则看起来Rails会检查数据库(SELECT COUNT(*)...),而如果它在内存中找到它则不会。

我想知道如果您已经有几条现有评论会发生什么,然后在这种情况下检查e.comments.size

你来自哪个版本的Rails的工作方式不同?