深嵌套部分不识别局部变量

时间:2015-09-12 08:27:14

标签: ruby-on-rails partials

在rails(4.2.3)app中,我有一个使用深嵌套部分的表单。我将两个变量(表单对象和设置字符串)作为局部数据链下的本地传递。链中的三个级别,部分不识别传入的变量。

的观点/帖/ new.html.erb

<%= form_for @post do |f| %>
  <% setting = get_setting %>
  ... 
  <%= render 'partials_folder/partial1', locals: { f: f, setting: setting } %>
  ...
<% end %>

# views/partials_folder/_partial1.html.erb
<%= render 'partials_folder/partial2', locals: { f: f, setting: setting } %>

# views/partials_folder/_partial2.html.erb
# f and setting are valid here
<%= f.inspect %> #=> <FormBuilder....>
<%= render 'partials_folder/partial3', locals: { f: f, setting: setting } %>

# views/partials_folder/_partial3.html.erb
# next line raises NameError "undefined local variable or method `f'"
<%= f.inspect %>

是否存在,可能是部分嵌套深度的限制,或者我是否正在达到堆栈大小的限制(因为表单对象被复制下来)?

1 个答案:

答案 0 :(得分:3)

partial3中,您可以通过local_assigns[:locals][:f]local_assigns[:locals][:settings]

访问本地变量

或者您可以在视图中使用render partial: "partial_name", locals: {locals},这样您就可以

<%= form_for @post do |f| %>
  <% setting = get_setting %>
  ... 
  <%= render partial: 'partials_folder/partial1', locals: { f: f, setting: setting } %>
  ...
<% end %>

# views/partials_folder/_partial1.html.erb
<%= render partial: 'partials_folder/partial2', locals: { f: f, setting: setting } %>

# views/partials_folder/_partial2.html.erb

<%= render partial: 'partials_folder/partial3', locals: { f: f, setting: setting } %>

# views/partials_folder/_partial3.html.erb

<%= f.inspect %>