ruby-on-rails - 在 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 %>
解决方案
我猜你可能想让那个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 查询。
推荐阅读
- reactjs - onChange 在 select for react 中不起作用
- c++-amp - 强调 GPU 时的 C++ AMP 部门怪癖
- python - 如何进行简单的长度验证
- azure - 将 .Net Core 控制台应用程序作为 Azure Webjob 运行时与 Azure SQL 数据库的连接错误
- mysql - MySQL GROUP BY 是否不必要地使用 Temporary?
- java - 查询无法通过 HQL 执行
- javascript - React Native 没有触发 Console.log
- c++ - 带有 reinterpret_cast 的向量
- javascript - Include JavaScript inside Material-UI tags
- javascript - Ajax 调用后刷新页面