ruby-on-rails - 什么时候 ruby​​ 数组计数不等于数组中的元素数?

标签 ruby-on-rails ruby arrays machinist

我正在运行 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">

最佳答案

这可能发生如下情况:

  1. @document对象以 0 document_items 开头.
  2. 两个 DocumentItem对象是直接创建的,即不是通过 @document.document_items 创建的。协会。

如果不重载@document在这一点上,那么length只返回缓存在内存中的 document_items 数组的大小 @document对象,它是 0。但是,count转到数据库,并按预期返回 2。

为了绕过它,您需要显式调用 reload@document创建新的 DocumentItem 后对象。

关于ruby-on-rails - 什么时候 ruby​​ 数组计数不等于数组中的元素数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5909347/

相关文章:

ruby-on-rails - Nginx,Passenger,Ruby on Rails 4.1.6 Ubuntu 14 - 403 禁止错误

ruby-on-rails - 仅为新条目构建嵌套字段

ruby-on-rails - 使用类方法启动工厂女孩

python - 根据多个条件替换 numpy 数组中的值而不使用任何循环

javascript - 在发送给用户之前修改数组

ruby-on-rails - Rails 中的模型类型和排序?

ruby-on-rails - 可下载的 Rails 生成器在哪里?

ruby-on-rails - rake : List/Remove custom rake task in specific environment (development/production )

php - 如何在php中将数组存储为键值对

javascript - 如何在 JavaScript 中识别以相同开头但值不同的不同 id