递归的部分局部变量不起作用

时间:2013-12-01 21:06:58

标签: ruby-on-rails ruby recursion ruby-on-rails-4 ancestry

我正在使用ancestry gem创建嵌套注释。

在相关的Railscasts剧集中,他使用了一个帮助方法,它使用了很多content_tag ...但我的部分非常复杂,我不想这样做(我想要它)在嵌入式红宝石中。)

问题在于,当递归渲染partial时,不会传递局部变量。

注释的初始呈现(递归开始的地方):

def index
  @comments = @commentable.comments.includes(:user).arrange(order: :created_at)
  render partial: 'shared/comments', locals: { comments: @comments }
end

这会创建嵌套对象的哈希值。从那里,部分应该接管:

<% comments.each do |comment, child_comments| %>
  <div class="comment" data-id="<%= comment.id %>">
    <%= image_tag comment.user.avatar_url, class: 'avatar', size: '40x40' %>
    <div class="content">
        <%= simple_format h(comment.body) %>
      <!-- binding.pry -->
      <%= render('shared/comments', locals: { comments: child_comments }) if child_comments %>
    </div>
  </div>
<% end %>

然而,当我运行这个时,我得undefined local variable or method 'comments'引用上面部分的第1行。这只发生在递归的第二个循环上(我假设除此之外),初始循环工作正常。

我知道变量是正确的,因为在渲染调用之前,您会看到我放置<!-- binding.pry -->。如果我在那里使用pry,我可以看到comments确实具有正确的值。

我不知道该怎么做...谢谢!

1 个答案:

答案 0 :(得分:3)

要么:

<%= render( partial: 'shared/comments', locals: { comments: child_comments }) if child_comments %>

或者:

<%= render('shared/comments', comments: child_comments) if child_comments %>