ruby-on-rails - 递归部分局部变量不起作用

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

我正在使用 ancestry gem 来创建嵌套评论。

在相关的 Railscasts 情节中,他使用了一个辅助方法,该方法使用了很多 content_tag的......但我的部分非常复杂,我不想那样做(我希望它在嵌入式 ruby 中)。

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

评论的初始呈现(递归开始的地方):

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确实有正确的值(value)观。

我不确定在这里做什么...谢谢!

最佳答案

要么:

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

或者:

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

关于ruby-on-rails - 递归部分局部变量不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20317266/

相关文章:

ruby-on-rails - 跟踪/记录 ActiveRecord 回调

ruby-on-rails - Sucker Punch Job 被 Passenger 杀死?还是死锁?

ruby-on-rails - 为什么 Chronic 错误地解析了四个字母的月份?

c++ - 递归排序 vector 的最简单方法?

mysql - 具有低基数第二列的复合索引是否足以影响性能以至于应该使用它?

ruby-on-rails - 将 omniauth facebook 登录变成弹出窗口

ruby 混淆器

ruby - 使用递归正则表达式(如 perl)在 Ruby 中匹配平衡括号

r - 如何设置最大递归深度?

c++ - 使用递归 C 替换数组中的所有负值