在 erb 模板中创建实例变量

create instance variable in erb template

假设我有 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 %>

我想您可能希望 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 %>  

当然,您会想要:

  • 使用真实的 path/to/show_partial,无论何时何地,并且
  • 做一些预先加载,这样你就不会做一大堆 N+1 查询。