Rails partials并传入实例var

时间:2014-07-19 21:45:57

标签: ruby-on-rails views rendering partials

我有一个部分(_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} %>

但它似乎并不喜欢它。

有什么想法吗?

2 个答案:

答案 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;再次为集合的每个成员