我正在使用 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/