开发者

can't pass locals to parital Rails

开发者 https://www.devze.com 2023-04-01 05:54 出处:网络
I have a partial _new_user_form.html.erb <%= form_for(@user, :remote => true, :html => {:id => \'new_user_form\'}) do |f|%>

I have a partial _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 %>

In the show.rb I want to use it and pass in some partial variables as follows:

<%= render  'users/new_user_form', :locals=> {:role => "Celebrant" } %>

However I g开发者_StackOverflowet this error:

undefined local variable or method `role' for #<#<Class:0x00000103d5e8b0>:0x00000103d5b930>

I read the documents about passing in locals and this seems correct. What am I doing wrong?


You're combining the short and long forms. Either of these are correct (identical):

render 'my_partial', :foo => 'bar'

render :partial => 'my_partial', :locals => { :foo => 'bar' }


I think you're calling render incorrectly. From the fine manual:

If no options hash is passed or :update specified, the default is to render a partial and use the second parameter as the locals hash.

So you end up going down this branch in the source:

view_renderer.render_partial(self, :partial => options, :locals => locals)

and that makes your call the same as this:

render :partial => 'users/new_user_form', :locals => { :locals => { :role => 'Celebrant } }

Note the extra level of nesting for :locals. Try this:

render 'users/new_user_form', { :role => 'Celebrant' }

I'm looking at (and using) 3.1 so your version might be a little different.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号