在我的主模板中,我有以下内容:
<%= 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。? (必须查看次要版本,没有我前面的代码)
(我知道这是一个新手问题:()
答案 0 :(得分:1)
你正在传递:form =&gt; f与部分一起,因此你应该参考“f”而不是“形式”
在你的部分中只用“f”替换“form”的所有实例,否则ruby / rails会认为你试图调用表单生成器方法(并且需要至少一个参数,因此错误消息)
答案 1 :(得分:1)
这很奇怪。它应该像你拥有它一样工作:form或:f。如果您使用的是Ruby 1.9,那么局部变量的工作方式可能会有所不同。我会用字符串键而不是符号来尝试:locals => { "f" => f }
,看看是否有帮助。此外,它是否可以使用更简单的案例,如:locals => { :x => 2 }
?