将局部变量分配给集合渲染的当前对象

时间:2018-12-10 14:05:58

标签: ruby-on-rails

我在渲染时以这种方式遍历集合:

<%= render partial: 'reply', collection: @replies %>

我想在此渲染调用 BUT 中分配本地人,他们将是与该迭代实例有关的本地人。因此,例如,如果回复中有一个名为 post 的父级关联,则我希望采用与传递 locals 选项相同的方式进行分配。不幸的是,据我所知这是不可能的,因此必须在局部中显式创建分配:

_reply.html.erb

<% post = reply.post %>

<div>
  <%= post.name %>
  ...
</div>

是否可以在初始渲染调用中传递本地变量?

1 个答案:

答案 0 :(得分:0)

从理论上讲,您不可能做到这一点,这里有不同的选择,让它像您现在一样,并在您的reply.html.erb内部,用本地帖子呼吁另一部分。 / p>

您甚至可以为此更改代码,以使其更短

<%= render @replies %>

,它将按照名称约定查找您的部分回复。在那个人里面

<%= render partial: 'post', locals: {post: reply.post} %>

如果此选项适用于您的情况。

或者,不要将其呈现为集合,而是使用each

<% @replies.each do |reply| %>
  <%= render reply, locals {post: reply.post} %>
<% end %>

您有更多选择,但目前找不到您想要的选择。