Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails部分和传入实例变量_Ruby On Rails_Views_Rendering_Partials - Fatal编程技术网

Ruby on rails Rails部分和传入实例变量

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:

我有一个部分(_car_grid.html.erb),如下所示:

<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
行失败,因此我将其更新为
    ,但由于未定义局部变量或方法“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 %>