使用通用fields_for的Nil对象

时间:2012-04-12 16:17:39

标签: ruby-on-rails forms fields-for

我正在尝试使用通用fields_for方法传递参数。我有一个表格:

<%= form_for @Album do |album| %>
...
<%= fields_for :photo do |photo| %>
  <%= photo.text_field :name %>
  <%= photo.text_area  :description %>
  ...
<% end %>
<% end %>

我希望这个表单会生成照片[名称]和照片[描述],这样当我提交表单时,我的控制器可以检查params [:photo]是否存在... #do something。 我没有使用嵌套表单的原因是因为有时甚至不会使用这些表单字段。

问题是我收到的是fields_for:photo line的错误。它说你没有期望它有一个零对象!您可能期望一个数组的实例。

如果没有nil,我怎么能做这个通用字段?

1 个答案:

答案 0 :(得分:0)

您遇到此问题,因为您的控制器中没有定义@photo变量。与fields_for一样,form_for旨在成为现有对象的包装器。符号:photo正在变成一个实例变量,但它是零,所以这就是你遇到这些错误的原因。您可以通过在控制器操作中定义照片来更正此问题:

@photo = @album.photos.first # if there's an existing photo
@photo = @album.photos.new # if there's not

如果您根本不想定义对象,则只需使用常规表单标记而不是fields_for