Ruby on rails 为什么(@object)的form|u在| form.html.erb中工作,而在index.html.erb中不工作

Ruby on rails 为什么(@object)的form|u在| form.html.erb中工作,而在index.html.erb中不工作,ruby-on-rails,ruby,forms,Ruby On Rails,Ruby,Forms,好的,我正试图将在ruby项目的“index.html.erb”中的“\u form.html.erb”中找到的表单放置到ruby项目的“index.html.erb”中,结果出错 “表单中的第一个参数不能包含nil或为空” 我知道将@customer更改为customer.new可以解决此问题,但我想知道为什么在一个文件中不需要这样做,而在另一个文件中却需要这样做 发生这种情况的原因以及我如何制作一个表单来更新索引页上的sqlite db。@customer是一个必须在相应的控制器操作中创

好的,我正试图将在ruby项目的“index.html.erb”中的“\u form.html.erb”中找到的表单放置到ruby项目的“index.html.erb”中,结果出错

“表单中的第一个参数不能包含nil或为空”


我知道将
@customer
更改为
customer.new
可以解决此问题,但我想知道为什么在一个文件中不需要这样做,而在另一个文件中却需要这样做


发生这种情况的原因以及我如何制作一个表单来更新索引页上的sqlite db。

@customer
是一个必须在相应的控制器操作中创建的变量。如果您的
#index
控制器操作使用该名称定义了一个变量,那么您就可以在视图模板中使用它;否则,您需要像这样创建它:

@customer = Customer.new # (or whatever the value is)

当Rails处理一个请求时,它只会执行一大堆(复杂的)代码,这些代码是由一堆不同的文件创建的。首先,它执行适当的控制器操作,然后执行在相应视图模板中找到的任何Ruby代码。因此,在视图模板中使用的任何变量(或任何方法名称)都是在之前的某个时刻首先定义的:要么在控制器操作中,要么在Rails无数的内置帮助文件中。

当我在索引或显示页面中使用form\u时,我喜欢做的就是将其设置为new

<%= form_for Customer.new, url: {controller: "customers", action: "create"} do |f| %>
  ...
  <%= f.submit %>
<% end %>

...

这样就有一个要创建的对象,我也希望传入控制器和操作。

您在控制器中定义了@customer吗?你的渲染部分是什么样子的?谢谢,我没有意识到我还需要添加@customer=customer.new。谢谢,谢谢。这很有帮助
<%= form_for Customer.new, url: {controller: "customers", action: "create"} do |f| %>
  ...
  <%= f.submit %>
<% end %>