我正在使用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
确实具有正确的值。
我不知道该怎么做...谢谢!
答案 0 :(得分:3)
要么:
<%= render( partial: 'shared/comments', locals: { comments: child_comments }) if child_comments %>
或者:
<%= render('shared/comments', comments: child_comments) if child_comments %>