无法将本地传递给部分Rails

时间:2011-09-02 04:50:33

标签: ruby-on-rails-3 renderpartial

我有一个部分_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>

我阅读了关于传入当地人的文件,这似乎是正确的。我做错了什么?

2 个答案:

答案 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因此您的版本可能会有所不同。