传递多个变量给局部视图

3
我在第一行的部分代码中遇到错误:未定义的本地变量或方法 'level'

这是我的视图代码:

<div id="comments">
    <% level = 0%>
    <% @comments.each do |comment| %>
      <%=render partial: 'comments/single_comment', locals: {level: level, comment: comment} %>
    <% end %>
    <% if 0 < level %>
    <% (level).times do %>
    </div>
    <% end %>
    <% end %>
  </div>
</div> 

部分首行:
<% if comment.level < level %>
  <% (level - comment.level).times do %>
  </div>
  <% end %>
<% end %> 

这里出了什么问题,你有什么想法吗?

有趣的是,partial 中的 comment 变量可以工作,但 level 变量却不行。这是因为我在块之前设置了它吗? - Marcin Doliwa
你确定Comment表中有名为level的列吗? - gabrielhilal
是的,我100%确定,刚刚双重检查过了。但问题不在于comment.level,而在于level变量。 - Marcin Doliwa
尝试在你的视图中调用comment.level。我相信问题不与变量有关... - gabrielhilal
看起来是这样,我将 level 改为了 @level 并且只留下了 locals: {comment: comment},在 partial 中我也将局部变量 level 改为了 @level。这样做一切都正常工作。 - Marcin Doliwa
显示剩余4条评论
3个回答

2

看起来这段代码应该能够工作(虽然不是很好,但应该可以正常运行)。我认为问题在于您在代码某些部分使用了您的部分代码(comments/single_comment),并且我们没有看到“局部级别”的其他部分:


很遗憾,没有 :( ,只需运行grep进行双重检查。 - Marcin Doliwa
我能在这里看到“应用程序跟踪”吗? - Dmitry Dedov

1

看起来代码没问题...请检查是否有使用single_comment文件名的部分视图...另外,您可以使用集合而不是循环

<%= render partial: 'comments/single_comment', collections: @comments, locals: { level: level } %>

只需在“views”目录中运行“grep -r 'single_comment' .”,这是我唯一使用它的地方(感谢收藏提示)。 - Marcin Doliwa

0

您正在以错误的方式向部分传递参数。请将其更新为以下内容。

<%=render partial: 'comments/single_comment', locals: => {:level => level, :comment => comment} %>

现在你可以在局部视图中按以下方式访问你的对象

<% if locals[:level] < level %>
  <% (level - locals[:level]).times do %>
  </div>
  <% end %>
<% end %> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接