【问题标题】:create instance variable in erb template在 erb 模板中创建实例变量
【发布时间】:2019-08-05 21:36:11
【问题描述】:

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


    【解决方案1】:

    我猜你可能想让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 查询。

    【讨论】:

    • 好吧,有时也可以单独查看显示视图,它仍然可以作为部分视图吗?另外,path/to/show_partial 是路径中的路径还是文件本身的路径?
    • 当然,您可以在show.html.erb 视图中渲染_show.html.erb 部分。 (注意部分以下划线开头。)并且,路径是文件本身的路径。因此,如果_show.html.erb 部分保存在app/views/vehicles 中,那么您将执行类似render partial: "vehicles/show", locals: {vehicle: vehicle} 的操作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    相关资源
    最近更新 更多