我正在使用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 %>
然而,当我运行这个程序时,我会得到引用上面部分的第1行的undefined local variable or method 'comments'
。这种情况只发生在递归的第二个循环中(我认为除此之外),初始循环运行良好。
我知道变量是正确的,因为在渲染调用之前,您会看到我放置了<!-- binding.pry -->
。如果我在那里使用priry,我可以看到comments
确实具有适当的值。
我不知道在这里该怎么办。。。谢谢
任一操作:
<%= render( partial: 'shared/comments', locals: { comments: child_comments }) if child_comments %>
或者:
<%= render('shared/comments', comments: child_comments) if child_comments %>