2010-03-19 53 views
1

在我的主模板,我有以下几点:错误渲染的部分(ROR)时传递的形式为局部变量

<%= 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 => { :f => f }代替:locals,并在部分代码中使用了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? (要回去看看小版本,没有在我面前的代码)

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

回答

1

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

+0

:locals => {:x => 2}起作用。 事实上,我意识到自从我在link_to_function中渲染此模板时,可能是因为我没有完全查看错误堆栈,并且错过了错误来源。我认为这有助于:我将继续保持它。谢谢。 – 2010-03-19 19:39:57

1

你逝去的:形式=> f控制部分沿,因此你应该参考“f”而不是“form”

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

+0

在这种情况下,您还需要将'::locals'哈希值更改为'{:f => f}'。 – Tom 2010-03-19 08:48:58

+0

谢谢!嗯,当地人散列如何工作? :form => f不会设置表单变量?对不起,有点困惑。 – 2010-03-19 12:34:04

+0

这不起作用。如果我使用':locals => {:f => f}'并且在部分中使用'f'而不是'form',我会得到未定义的变量错误。 – 2010-03-19 14:09:37