我有一个部分(_car_grid.html.erb)如下:
<ul class="car-grid">
<%= render @cars %>
</ul>
然后我希望从其他地方调用partial,但我正在使用的实例var被称为@car_results
。有没有办法传递@car_results
并让它在部分内部充当@cars
?
我试过了:
<%= render 'shared/car_grid', locals: {cars: @car_results} %>
但它似乎并不喜欢它。
有什么想法吗?
答案 0 :(得分:0)
你很亲密。删除部分中的“@”,以便@cars
变为cars
。当你将locals传递给partial时,partial会接收局部变量,而不是实例变量。
这意味着您需要更改部分的其他调用以及:
<%= render 'shared/car_grid', locals: {cars: @cars} %>
答案 1 :(得分:0)
<强>局部模板强>
就其性质而言,Rails partials
并不意味着@instance variables
。它们旨在用于您的应用程序的任何部分,因此您需要将local variables
传递给它们:
<%= render partial: 'shared/car_grid', locals: { cars: @car_results } %>
部分基本上类似于code block
- 其中引用了local
个变量。这意味着在partial中,你必须调用一个局部变量,就像调用partial:
#app/views/shared/_car_grid.html.erb
<% cars.each do |car| %>
<%= car.name %>
<% end %>
-
<强>集合强>
您应该了解的其他一些有趣的功能是在调用部分时使用collection
。
<%= render partial: "shared/car_grids", collection: @car_results, as: :car %>
这基本上就像each
循环一样 - 让你能够重新加载部分&amp;再次为集合的每个成员