为什么form_for(@object)做| f |在_form.html.erb中工作,但不在index.html.erb中工作

时间:2015-06-28 01:49:17

标签: ruby-on-rails ruby forms

好的,所以我正在尝试将我的ruby项目的“index.html.erb”中的“_form.html.erb”中找到的表单放入错误中

  

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

<%= form_for(@customer) do |f| %>

我知道将@customer更改为Customer.new可以解决此问题,但我想知道为什么在一个文件中这不是必需的,而在另一个文件中它是

为什么会发生这种情况,如何制作一个表格来更新索引页面上的 sqlite db

2 个答案:

答案 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 %>

这样就有了一个要创建的对象,我也想传递控制器和动作。