在 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 查询。
假设我有 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 查询。