渲染部分(RoR)将表单作为局部变量传递时出错

时间:2010-03-19 06:56:39

标签: ruby-on-rails

在我的主模板中,我有以下内容:

 <%= render :partial => "delivery_date", :collection => @brand.delivery_dates, :locals => {:form => f} %>

但是当部分尝试使用表单局部变量时,我收到此错误

Showing app/views/brands/_delivery_date.html.erb where line #2 raised:

wrong number of arguments (0 for 1)
Extracted source (around line #2):

1: <%= delivery_date.id %>
2: <%= form.text_field :name %>
3: <% new_or_existing = delivery_date.new_record? ? 'new' : 'existing' %>
4: <% prefix = "brand[#{new_or_existing}_delivery_date_attributes][]" %>
5: <% fields_for prefix, delivery_date do |dd_f| %>

有谁知道这个错误意味着什么?

其实我想做

<% form.fields_for delivery_date do |dd_f| %> 

但也失败了。

我尝试将:locals替换为:locals => { :f => f }并在部分中使用f引用表单。没有效果,错误就是undefined method or variable f

...

好的,而不是要求您调试错误,问题还在于如何以嵌套的部分形式呈现fields_for:

在主模板中:

<% form_for @object do |f| %>
    <% render :partial => 'child', :collection: @object.child %>
<% end %>

在儿童模板中:

<% form.fields_for child do |c_f| %>
    <%= c_f.text_field :foo %>
<% end %>

传递此表单对象的适当方法是什么?

抱歉忘了添加环境:

Ruby 1.8.7

Rails 2.3。? (必须查看次要版本,没有我前面的代码)

(我知道这是一个新手问题:()

2 个答案:

答案 0 :(得分:1)

你正在传递:form =&gt; f与部分一起,因此你应该参考“f”而不是“形式”

在你的部分中只用“f”替换“form”的所有实例,否则ruby / rails会认为你试图调用表单生成器方法(并且需要至少一个参数,因此错误消息)

答案 1 :(得分:1)

这很奇怪。它应该像你拥有它一样工作:form或:f。如果您使用的是Ruby 1.9,那么局部变量的工作方式可能会有所不同。我会用字符串键而不是符号来尝试:locals => { "f" => f },看看是否有帮助。此外,它是否可以使用更简单的案例,如:locals => { :x => 2 }