Ruby on rails Rails部分和传入实例变量
我有一个部分(_car_grid.html.erb),如下所示:Ruby on rails Rails部分和传入实例变量,ruby-on-rails,views,rendering,partials,Ruby On Rails,Views,Rendering,Partials,我有一个部分(_car_grid.html.erb),如下所示: <ul class="car-grid"> <%= render @cars %> </ul> 但它似乎不喜欢它 有什么想法吗?你很接近了。在部分中删除“@”,使@cars变为cars。将局部变量传递给分部时,分部将接收局部变量,而不是实例变量 这意味着您需要将partial的其他调用也更改为: <%= render 'shared/car_grid', locals: {cars:
<ul class="car-grid">
<%= render @cars %>
</ul>
但它似乎不喜欢它
有什么想法吗?你很接近了。在部分中删除“@”,使
@cars
变为cars
。将局部变量传递给分部时,分部将接收局部变量,而不是实例变量
这意味着您需要将partial的其他调用也更改为:
<%= render 'shared/car_grid', locals: {cars: @cars} %>
在分部代码中,不要使用实例变量。菲利普的建议是正确的 然而,我在代码中注意到的另一件事是,您在呈现部分内容时使用了错误的语法。实际上,有两种方法可以渲染局部
<%= render partial: "shared/car_grid", locals: {cars: @car_results} %>
或
您的代码不包含
部分
关键字,因此您不需要使用局部
部分
就其性质而言,Rails并不意味着接受@实例变量
。它们用于应用程序的任何部分,因此您需要将局部变量
传递给它们:
<%= render partial: 'shared/car_grid', locals: { cars: @car_results } %>
--
收藏
您应该了解的另一个有趣的功能是调用分部函数时的使用
<%= render partial: "shared/car_grids", collection: @car_results, as: :car %>
这基本上就像一个
each
循环,让您能够为集合中的每个成员重新加载部分内容。当我这样做时,渲染cars
行失败,因此我将其更新为<%= render partial: 'shared/car_grid', locals: { cars: @car_results } %>
#app/views/shared/_car_grid.html.erb
<% cars.each do |car| %>
<%= car.name %>
<% end %>
<%= render partial: "shared/car_grids", collection: @car_results, as: :car %>