4

私はtestunitを(機械工で)実行していて、Rubyデバッガーを実行するとこの非常に奇妙な結果が得られます

(rdb:1) @document.document_items
[]
(rdb:1) @document.document_items.count
2
(rdb:1) @document.document_items.length
0
(rdb:1) @document.document_items.size
0
(rdb:1) @document.document_items.class
Array
(rdb:1) @document
#<Document id: 1, title: "Recusandae quibusdam dicta deleniti et voluptate.", state: "published", site_id: nil, template_document_id: 2, most_important_message: "Quam totam corporis similique voluptatibus quaerat ...", delta: nil, approver_id: 1, author_id: 1, account_id: 1, updated_at: "2011-05-06 08:59:12", created_at: "2011-05-06 08:59:12">
(rdb:1) DocumentItem.find(:all)
[#<DocumentItem id: 1, title: "Et voluptatem officia voluptatem omnis voluptas.", body: "Nobis iste nostrum beatae corrupti ea qui debitis. ...", position: nil, document_id: 1, created_at: "2011-05-06 08:59:12", updated_at: "2011-05-06 08:59:12", version: 1, is_heading: false, help_message: nil, optional: nil, template_question_id: nil>, #<DocumentItem id: 2, title: "Ipsum in odio laborum ut officia.", body: "Quas temporibus iusto quidem non repellat. Quia des...", position: nil, document_id: 1, created_at: "2011-05-06 08:59:12", updated_at: "2011-05-06 08:59:12", version: 1, is_heading: false, help_message: nil, optional: nil, template_question_id: nil>]

私の Document/DocumentItem モデルのスニペット:

class Document < ActiveRecord::Base
    ...
    has_many :document_items
    ...
end

class DocumentItem < ActiveRecord::Base
    ...
    belongs_to :document
    ...
end

document_items 配列の数が document_items の要素数と異なるのはなぜですか? 機械仕掛けの魔法か?(関連する可能性があります: Ruby 1.92 in Rails 3: A Case where Array.length Does Not Equal Array.count? )

しかし、これらすべての根本的な問題は、なぜ document_items が空なのかということです。これが機能するため、接続は正しく設定されています。

(rdb:1) DocumentItem.first.document
#<Document id: 1, title: "Recusandae quibusdam dicta deleniti et voluptate.", state: "published", site_id: nil, template_document_id: 2, most_important_message: "Quam totam corporis similique voluptatibus quaerat ...", delta: nil, approver_id: 1, author_id: 1, account_id: 1, updated_at: "2011-05-06 08:59:12", created_at: "2011-05-06 08:59:12">
4

1 に答える 1

2

これは、次のように発生する可能性があります。

  1. @documentオブジェクトは 0 で始まりましたdocument_items
  2. 2 つDocumentItemのオブジェクトが、関連付けを介さずに直接作成されました@document.document_items

@documentこの時点でリロードしないlengthと、オブジェクトのメモリにキャッシュされた document_items 配列のサイズのみが返され@documentます。これは 0 です。ただし、countデータベースに移動すると、予想どおり 2 が返されます。

これを回避するには、新しいオブジェクトを作成reloadした後に明示的に呼び出す必要があります。@documentDocumentItem

于 2011-05-09T07:10:02.333 に答える