Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 Rspec找不到父对象_Ruby On Rails_Ruby On Rails 4_Rspec_Capybara - Fatal编程技术网

Ruby on rails Rspec找不到父对象

Ruby on rails Rspec找不到父对象,ruby-on-rails,ruby-on-rails-4,rspec,capybara,Ruby On Rails,Ruby On Rails 4,Rspec,Capybara,好的,在我的实际邮件代码中,我使用了以下临时权宜之计: if Rails.env == "test" @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id)}"} else @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemli

好的,在我的实际邮件代码中,我使用了以下临时权宜之计:

  if Rails.env == "test" 
    @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id)}"}
  else
    @requestlist["#{index}"] = {"#{Itemlist.find_by_id(b.itemlist_id).name}" => "#{Inventory.find_by_id(b.inventory_id).signup.email}"}
  end
这非常奇怪,因为:

  • 如果我使用test第二条语句,我会得到一个
    NoMethodError
    ,“signup”,用于
    NilClass
  • 但显然,由于第一条语句正在传递,
    Inventory
    显然不是
    Nil
    (我的意思是,如果没有找到
    注册
    对象,情况会有所不同……)
  • 另外,我已经手工测试过了,邮件收发员能够检索
    。注册。电子邮件
    很好
  • 此外,其他需要检索
    signup.email
    for
    Inventory
    的测试也可以通过

  • 想法?

    首先,你为什么不直接写呢

    @requestlist[index] = { Itemlist.find_by_id(b.itemlist_id).name => Inventory.find_by_id(b.inventory_id).signup.email }
    
    第二,你难道不怀疑NilClass的命名者可能就是这个意思吗

    Inventory.find_by_id(b.inventory_id)
    
    不从数据库返回任何行


    第三,如果
    if
    并尝试“修复
    测试”(顺便说一句,您可以编写
    Rails.env.test?`)

    第1点只是我的愚蠢。我修复了代码。第3点我现在明白了,是的,这是我尝试“修复”“考试要开绿灯,否则我知道总有一天我会被红灯弄糊涂的。”。关于第2点,我不明白,我正在从数据库中检索一行,因为在测试的固定版本中,有一个对象对于
    Inventory.find\u by\u id(b.Inventory\u id)
    将第二行更改为
    Inventory.find(b.Inventory\u id)
    您将开始出现异常,因为此id在db中找不到(
    find_by_id
    返回nil,您不应该在没有充分理由的情况下使用它),并且要解决库存未按id找到的问题,我想您必须显示您的模型。你有任何验证吗?我没有任何会阻碍这一点的验证。具有讽刺意味的是,我有一份确认书,上面说库存必须属于注册。。。这意味着,在测试时,库存根本存在,这意味着它必须与某些注册关联。对不起,我被你的其他建议弄糊涂了?无论如何,当我更改为just
    find
    时,我得到:error:
    无法准确地找到没有ID的库存,这证实了我的怀疑
    找不到没有ID的库存
    意味着
    b。库存ID
    要么为零,要么为空,现在您必须调试回设置它的位置,并在那里找到一个but。
    b
    从哪里来?