首页 > 解决方案 > 在 erb 模板中创建实例变量

问题描述

假设我有 2 个 erb 视图:一个列表视图和一个显示视图,我想在列表视图中呈现显示视图

列表显示

<% @vehicles.each do |vehicle| %>
  <h2><%= vehicle.type %></h2>
  <ul>
    <% vehicle.accessories.each do |accessory| %>
      <li><% accessory.title %></li>
    <% end %>
  </ul>
<% end %>

显示视图

<h2><%= @vehicle.type %></h2>
<ul>
  <% @vehicle.accessories.each do |accessory| %>
    <li><% accessory.title %></li>
  <% end %>
</ul>

问题是显示视图需要一个@vehicle实例变量,如果我要嵌套这些,我怎么能从父级传递它,它仍然显示为一个实例变量,访问@vehicle?就像是:

<% @vehicles.each do |vehicle| %>
  <%= render "show" %>
<% end %>

标签: ruby-on-railserb

解决方案


我猜你可能想让那个show视图成为partial. 就像是:

<h2><%= vehicle.type %></h2>
<ul>
  <% vehicle.accessories.each do |accessory| %>
    <li><% accessory.title %></li>
  <% end %>
</ul>

然后您可以执行以下操作:

<% @vehicles.each do |vehicle| %>
  <%= render "path/to/show_partial", locals: {vehicle: vehicle} %>
<% end %>  

自然,您会想要:

  • 使用 real path/to/show_partial,无论发生什么,并且
  • 做一些急切的加载,这样你就不会做一大堆 N+1 查询。

推荐阅读