好的,所以我正在尝试将我的ruby项目的“index.html.erb”中的“_form.html.erb”中找到的表单放入错误中
“表格中的第一个参数不能包含nil或为空”
<%= form_for(@customer) do |f| %>
我知道将@customer
更改为Customer.new
可以解决此问题,但我想知道为什么在一个文件中这不是必需的,而在另一个文件中它是
为什么会发生这种情况,如何制作一个表格来更新索引页面上的 sqlite db 。
答案 0 :(得分:0)
@customer
是必须在相应控制器操作中的某处创建的变量。如果您的#index
控制器操作按该名称定义变量,那么您将能够在视图模板中使用它;否则你需要像这样创建它:
@customer = Customer.new # (or whatever the value is)
当Rails处理请求时,它只执行一大堆(和复杂的)代码块,这些代码是从一堆不同的文件中创建的。首先,它执行适当的控制器操作,然后执行在相应视图模板中找到的任何Ruby代码。因此,视图模板中使用的任何变量(或任何方法名称)首先在此之前的某个时刻定义:在控制器操作中,或在Rails的无数内置帮助文件之一中。
答案 1 :(得分:0)
当我在索引或显示页面中使用 form_for 时,我喜欢将其设置为新
<%= form_for Customer.new, url: {controller: "customers", action: "create"} do |f| %>
...
<%= f.submit %>
<% end %>
这样就有了一个要创建的对象,我也想传递控制器和动作。