我有一个部分_new_user_form.html.erb
<%= form_for(@user, :remote => true, :html => {:id => 'new_user_form'}) do |f|%>
<strong><%= :form_text %></strong>
<%= f.text_field :email, :placeholder => get_placeholder_text(@board), :size => "30" %>
<%= hidden_field_tag :role, role %>
<%=f.submit "SAVE", :class => "button-small" %>
<% end %>
在show.rb中我想使用它并传递一些部分变量,如下所示:
<%= render 'users/new_user_form', :locals=> {:role => "Celebrant" } %>
但是我收到了这个错误:
undefined local variable or method `role' for #<#<Class:0x00000103d5e8b0>:0x00000103d5b930>
我阅读了关于传入当地人的文件,这似乎是正确的。我做错了什么?
答案 0 :(得分:5)
你结合了短形式和长形式。其中任何一个都是正确的(相同):
render 'my_partial', :foo => 'bar'
render :partial => 'my_partial', :locals => { :foo => 'bar' }
答案 1 :(得分:3)
我认为您错误地调用了render
。来自fine manual:
如果未传递选项哈希或指定
:update
,则默认为呈现部分并使用第二个参数作为本地哈希。
所以你最终会在源代码中找到这个分支:
view_renderer.render_partial(self, :partial => options, :locals => locals)
这使你的电话与此相同:
render :partial => 'users/new_user_form', :locals => { :locals => { :role => 'Celebrant } }
请注意:locals
的额外嵌套级别。试试这个:
render 'users/new_user_form', { :role => 'Celebrant' }
我正在查看(并使用)3.1因此您的版本可能会有所不同。