Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么时候ruby数组的计数不等于数组中的元素数?_Ruby On Rails_Ruby_Arrays_Machinist - Fatal编程技术网

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

Ruby on rails 什么时候ruby数组的计数不等于数组中的元素数?,ruby-on-rails,ruby,arrays,machinist,Ruby On Rails,Ruby,Arrays,Machinist,我正在运行testunit(与machinist一起),在运行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

我正在运行testunit(与machinist一起),在运行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>]
(rdb:1)@document.document\u项目
[]
(rdb:1)@document.document\u items.count
2.
(rdb:1)@document.document\u items.length
0
(rdb:1)@document.document\u items.size
0
(rdb:1)@document.document\u items.class
排列
(rdb:1)@文件
#
(rdb:1)DocumentItem.find(:全部)
[#, #]
my Document/DocumentItem模型的一个片段:

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

class DocumentItem < ActiveRecord::Base
    ...
    belongs_to :document
    ...
end
class文档
为什么文档\u项数组计数与文档\u项中的元素数不同?这是某种机械师的魔法吗? (可能涉及:)

但问题是,为什么文档项是空的?连接设置正确,因为这样可以:

(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">
(rdb:1)DocumentItem.first.document
#

这可能发生如下情况:

  • @document
    对象以0
    文档项开始
  • 直接创建了两个
    DocumentItem
    对象,即不通过
    @document.document\u items
    关联
  • 如果此时未重新加载
    @document
    ,则
    length
    仅返回缓存在
    @document
    对象内存中的document\u items数组的大小,即0。但是,
    count
    转到数据库,并按预期返回2


    为了避免这种情况,在创建新的
    DocumentItem
    对象后,需要显式调用
    reload
    on
    @document

    @document.document\u items
    的输出是什么?它在第一行,一个空数组:[]啊,对不起。您的DocumentItem模型是否有默认范围?如果您尝试@document.document\u items.all.length会发生什么情况?@document.document\u items.all.length#给出2(与计数一样)谢谢!问题是添加文档项时,机械师没有加载文档对象。