Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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/25.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 NoMethodError:未定义的方法_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails NoMethodError:未定义的方法

Ruby on rails NoMethodError:未定义的方法,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在使用RubyonRails进行敏捷Web开发。运行测试时,我得到以下信息: Error: LineItemsControllerTest#test_should_update_line_item: NoMethodError: undefined method 'product_id' for nil:NilClass test/controllers/line_items_controller_test.rb:13:in `block in <class:LineI

我正在使用RubyonRails进行敏捷Web开发。运行测试时,我得到以下信息:

Error: LineItemsControllerTest#test_should_update_line_item:
NoMethodError: undefined method 'product_id' for nil:NilClass
        test/controllers/line_items_controller_test.rb:13:in `block in <class:LineItemsControllerTest>

这个错误的意思是:

patch :update, id: (at)line_item, line_item: { product_id: (at)line_item.product_id }

(at)行_项为零。因此,这意味着您可能在create方法或update方法中有错误(您没有得到正确的行项目)

该错误的意思是:

patch :update, id: (at)line_item, line_item: { product_id: (at)line_item.product_id }

(at)行_项为零。这意味着你可能在create方法或update方法中有错误(你没有得到正确的行项目)

我已经检查了书中的实际示例,所以现在将发布答案,以便其他人可以看到它。如果您要测试的是
update
操作,您应该先更新一些内容。这就是为什么书中的测试和任何其他现实生活中的测试都有
setup
方法来预先创建测试项:

setup do
  @line_item = line_items(:one)
end

我已经检查了书中的实际例子,所以现在我将发布答案,以便其他人可以看到它。如果您要测试的是
update
操作,您应该先更新一些内容。这就是为什么书中的测试和任何其他现实生活中的测试都有
setup
方法来预先创建测试项:

setup do
  @line_item = line_items(:one)
end


谢谢你的反馈。我已经用我的创建和更新方法更新了我的帖子。你能看一下吗?谢谢!谢谢你的反馈。我已经用我的创建和更新方法更新了我的帖子。你能看一下吗?谢谢!您的
@line\u项
没有在任何地方初始化,因此它是
。它应该在块之前初始化。从逻辑上讲,您更新了一些已经存在的内容,所以要进行测试更新,您应该创建一些要更新的内容。
@line\u item
未在测试块内初始化,这就是为什么它返回
nil
你应该在块之前初始化
@line\u item
我在这里看到你的代码有一些问题:product=product.find(params[:product\u id])应该是(at)product=product.find(params[:product\u id])(at)line\u item=(at)cart.add_product((at)product.id)并做一些测试。。。在第_行item.save之后做一些flash[:notice],看看他是否真的在保存。获取sqlitebrowser并打开数据库,查看您是否获得了数据库中的实际数据。@Boltz0r感谢您的回复。我按照您的建议使用了sqlitebrowser,我正在将数据输入数据库。您的
@line\u项
没有在任何地方初始化,因此它是
。它应该在块之前初始化。从逻辑上讲,您更新了一些已经存在的内容,所以要进行测试更新,您应该创建一些要更新的内容。
@line\u item
未在测试块内初始化,这就是为什么它返回
nil
你应该在块之前初始化
@line\u item
我在这里看到你的代码有一些问题:product=product.find(params[:product\u id])应该是(at)product=product.find(params[:product\u id])(at)line\u item=(at)cart.add_product((at)product.id)并做一些测试。。。在第_行item.save之后做一些flash[:notice],看看他是否真的在保存。获取sqlitebrowser并打开数据库,查看您是否获得了数据库中的实际数据。@Boltz0r感谢您的回复。我得到了你建议的sqlitebrowser,我正在将数据输入数据库。谢谢,它成功了!我是这方面的初学者,希望得到一些建议,告诉我还需要学习什么来提高我对Rails的理解。既然你读了这本书,你能就你后来学习的材料给我一些建议吗?@Salamit不确定我的建议是否有意义,因为我在学习了几年PHP之后转向了Ruby。我从一些指南和教程开始,包括Rails官方教程,然后因为我的知识似乎有点零碎而选择了这本书。我可以建议你也看看这些指南,然后尝试按照书中的最佳实践(如TDD)构建自己的应用程序。在此之后,根据你的总体目标(为什么你要开始所有这些Ruby/Rails的东西)来决定。Salamit也要确保你知道在某种程度上学习Ruby本身。由于RoR是一种默认框架,许多人从RoR开始使用Ruby。这还不错,因为它可以让你感受到真实的示例和应用程序,但别忘了学习Ruby和它很酷的元编程技巧。@Salamit还有一个问题,根据TDD原则,每个测试都是在它的隔离环境中运行的,因此,如果您在
create
test中创建记录,则在运行
update
test时不会显示该记录,这就是您必须使用
setup
来准备测试数据的原因。感谢它的工作!我是这方面的初学者,希望得到一些建议,告诉我还需要学习什么来提高我对Rails的理解。既然你读了这本书,你能就你后来学习的材料给我一些建议吗?@Salamit不确定我的建议是否有意义,因为我在学习了几年PHP之后转向了Ruby。我从一些指南和教程开始,包括Rails官方教程,然后因为我的知识似乎有点零碎而选择了这本书。我可以建议你也看看这些指南,然后尝试按照书中的最佳实践(如TDD)构建自己的应用程序。在此之后,根据你的总体目标(为什么你要开始所有这些Ruby/Rails的东西)来决定。Salamit也要确保你知道在某种程度上学习Ruby本身。由于RoR是一种默认框架,许多人从RoR开始使用Ruby。这还不错,因为它可以让你感受到真实的示例和应用程序,但别忘了学习Ruby和它很酷的元编程技巧。@Salamit还有一个问题,根据TDD原则,每个测试都是在它的隔离环境中运行的,因此,如果您在
create
test中创建了一条记录,那么在运行
update
test时它不会出现,这就是为什么您必须使用
setup
来准备测试数据的原因。