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 4 钢轨Rspec测试失败:命名错误:_Ruby On Rails 4_Rspec - Fatal编程技术网

Ruby on rails 4 钢轨Rspec测试失败:命名错误:

Ruby on rails 4 钢轨Rspec测试失败:命名错误:,ruby-on-rails-4,rspec,Ruby On Rails 4,Rspec,我正在学习rails,我不知道为什么会出现这个测试失败/错误。任何解释都很好!我想要一个解决方案,但我真正需要的是理解为什么我会在一开始就失败,这样我就知道如何在将来处理这个问题 Rails版本是4.1.1, Ruby版本2.0.0p353, Rspec版本3.0.1, 水豚2.3.0 这里是错误 Failure/Error: click_link "New Todo Item" NoMethodError: undefined method `todo_item' for nil:Ni

我正在学习rails,我不知道为什么会出现这个测试失败/错误。任何解释都很好!我想要一个解决方案,但我真正需要的是理解为什么我会在一开始就失败,这样我就知道如何在将来处理这个问题

Rails版本是4.1.1, Ruby版本2.0.0p353, Rspec版本3.0.1, 水豚2.3.0

这里是错误

Failure/Error: click_link "New Todo Item"
 NoMethodError:
   undefined method `todo_item' for nil:NilClass
 # ./app/controllers/todo_items_controller.rb:8:in `new'
 # ./spec/features/todo_items/create_spec.rb:16:in `block (2 levels) in <top (required)>'
这就是与之相适应的观点。 app/views/todo_items/index.html.erb

<h1><%= @todo_list.title %></h1>
<p>testing 123</p>

<ul class="todo_items">
<% @todo_list.todo_items.each do |todo_item| %>
<li><%= todo_item.content %></li>
<% end %>
</ul>

<p>
<%= link_to "New Todo Item", new_todo_list_todo_item_path %>
</p>

测试123

如果您还需要什么,请告诉我,并提前感谢您

最好的


Jackson

@todo\u项为零,因为您没有在新方法中定义@todo\u列表。您希望新方法如下所示:

def new
  @todo_list = TodoList.find(params[:todo_list_id])
  @todo_item = @todo_list.todo_items.new  
end 
然而,这并不是很枯燥,因为您已经在索引方法中定义了@todo_list。您应该创建一个名为set_list的新方法,然后使用before_操作在相关方法之前调用它

before action :set_list

def new
  @todo_item = @todo_list.todo_items.new 
end

private
  def set_list
    @todo_list = TodoList.find(params[:todo_list_id])
  end

@todo_项为nil,因为您没有在新方法中定义@todo_列表。您希望新方法如下所示:

def new
  @todo_list = TodoList.find(params[:todo_list_id])
  @todo_item = @todo_list.todo_items.new  
end 
然而,这并不是很枯燥,因为您已经在索引方法中定义了@todo_list。您应该创建一个名为set_list的新方法,然后使用before_操作在相关方法之前调用它

before action :set_list

def new
  @todo_item = @todo_list.todo_items.new 
end

private
  def set_list
    @todo_list = TodoList.find(params[:todo_list_id])
  end

@todo_项为nil,因为您没有在新方法中定义@todo_列表。您希望新方法如下所示:

def new
  @todo_list = TodoList.find(params[:todo_list_id])
  @todo_item = @todo_list.todo_items.new  
end 
然而,这并不是很枯燥,因为您已经在索引方法中定义了@todo_list。您应该创建一个名为set_list的新方法,然后使用before_操作在相关方法之前调用它

before action :set_list

def new
  @todo_item = @todo_list.todo_items.new 
end

private
  def set_list
    @todo_list = TodoList.find(params[:todo_list_id])
  end

@todo_项为nil,因为您没有在新方法中定义@todo_列表。您希望新方法如下所示:

def new
  @todo_list = TodoList.find(params[:todo_list_id])
  @todo_item = @todo_list.todo_items.new  
end 
然而,这并不是很枯燥,因为您已经在索引方法中定义了@todo_list。您应该创建一个名为set_list的新方法,然后使用before_操作在相关方法之前调用它

before action :set_list

def new
  @todo_item = @todo_list.todo_items.new 
end

private
  def set_list
    @todo_list = TodoList.find(params[:todo_list_id])
  end

它告诉你@todo_列表为零。希望你能明白为什么我在控制器中定义了“@todo_”项,而它本应该是@todo_列表。它告诉你@todo_列表为零。希望你能明白为什么我在控制器中定义了“@todo_”项,而它本应该是@todo_列表。它告诉你@todo_列表为零。希望你能明白为什么我在控制器中定义了“@todo_”项,而它本应该是@todo_列表。它告诉你@todo_列表为零。希望你能明白为什么我在控制器中定义了“@todo_”项,而它本应该是@todo_列表。哦,好的!天啊,所以我先定义了待办事项而不是待办事项列表。现在我明白了。。这么简单的错误。非常感谢。哦,好的!天啊,所以我先定义了待办事项而不是待办事项列表。现在我明白了。。这么简单的错误。非常感谢。哦,好的!天啊,所以我先定义了待办事项而不是待办事项列表。现在我明白了。。这么简单的错误。非常感谢。哦,好的!天啊,所以我先定义了待办事项而不是待办事项列表。现在我明白了。。这么简单的错误。非常感谢。