深层嵌套部分不识别局部变量
Deep nested partial does not recognize local variable
在 rails (4.2.3) 应用程序中,我有一个使用深层嵌套部分的表单。我将两个变量(表单对象和设置字符串)作为局部变量传递到局部变量链中。在链下大约三个级别,部分不识别传入的变量。
views/posts/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 %>
是否存在部分嵌套深度的限制,或者我是否达到了堆栈大小的限制(当表单对象被复制下来时)?
在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 %>
在 rails (4.2.3) 应用程序中,我有一个使用深层嵌套部分的表单。我将两个变量(表单对象和设置字符串)作为局部变量传递到局部变量链中。在链下大约三个级别,部分不识别传入的变量。
views/posts/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 %>
是否存在部分嵌套深度的限制,或者我是否达到了堆栈大小的限制(当表单对象被复制下来时)?
在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 %>