2012-03-23 18 views
0

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 

、私はCommentオブジェクトがまだ保存されていないので、e.expense.sizeは0を返すことを期待しています。

答えて

0

コメントを作成すると、1件のコメントが作成されます。データベースにはまだ存在しませんので、e.commment.countは0を返しますが、アプリケーション内に存在しますので、sizeは1を返します。

しかし、私はここで少し潜在的に予期しない結果があります見ています。メモリにコメントが存在しない場合は、RailsがDB(SELECT COUNT(*)...)でチェックしているように見えますが、メモリ内にコメントがある場合はそうではありません。

私は、その場合にはe.comments.sizeを確認し、あなたはすでにいくつかの既存のコメントがあった場合はどうなるのだろうか?あなたはそこから来ていたのRailsのバージョン

が異なり働いていましたか?

+0

アップグレードしてからではないかもしれません。以前は気づかなかったかもしれません。事実、私は 'e.commentsでのコメントのために'を呼び出すときにこの動作に入ります、そして今構築されたコメントはまだ保存されていないので、エラーも発生します – AkyRhO

関連する問題