Ruby on rails Rails:`next`方法在移动到Rails部分后停止工作-下一个错误无效

Ruby on rails Rails:`next`方法在移动到Rails部分后停止工作-下一个错误无效,ruby-on-rails,ruby,loops,partial-views,Ruby On Rails,Ruby,Loops,Partial Views,我当前的ERB文件如下(工作正常) 此重构导致出现问题SyntaxError(\u element.html.erb:40:Invalid next) 我不知道为什么next在移动到partial后会停止工作。任何解决办法都将不胜感激 提前谢谢 当前问题的答案: Next不能在块的上下文之外使用,这是有充分理由的。您希望它如何发挥作用 def some_method(s) next unless s s end 显然,在一个街区内,这可能是有意义的 [nil,2,3,nil,4

我当前的
ERB
文件如下(工作正常)

此重构导致出现问题
SyntaxError(\u element.html.erb:40:Invalid next)

我不知道为什么
next
在移动到partial后会停止工作。任何解决办法都将不胜感激

提前谢谢

当前问题的答案:

Next不能在块的上下文之外使用,这是有充分理由的。您希望它如何发挥作用

 def some_method(s)
   next unless s
   s
 end
显然,在一个街区内,这可能是有意义的

[nil,2,3,nil,4].map {|n| some_method(n) } # sure kind of makes sense
#but what happens when I call
some_method(nil)
#how would you like it to use the next call here
#next what; there is no next; you have reached the end of the universe 
可行的解决办法:

由于您对这个概念相当熟悉,而且我的评论中的代码对您来说似乎是不可接受的。您可以尝试以下方法:

<div>
    <% [1,2,3,4,5].each do |el| %>
        <%= render partial: "element", locals: {el: el} %>
    <% end %>
</div>
您可以将实际条件替换为
el==1
,但如果条件为真,则不会呈现span标记,否则将呈现span标记

 <span>Whatever el is here</span>
这里有什么el

因为我发现它比使用
html\u-safe
raw
要好得多,除非您真的需要。

请记住,在动态生成的视图类中将部分编译成方法,您可以通过替换
return
而不是
next
来获得所需的效果。它将缩短部分模板的呈现,循环将继续枚举的下一个元素

因此,您的部分
\u element.html.erb
将为:



我打赌你不应该使用
next
进入partial,因为它是
的一部分。每个
循环都有一个拼写错误
loclas
应该是
locals
。其次,您可以这样做
。您遇到的问题是,分部与块本身没有上下文。渲染方法只是依次为每个
el
调用。想象一下,如果您想在其他地方使用此分部,而它不在循环中。“你希望它能起到什么作用?”engineersmnky-谢谢你发现了打字错误,更正了它。我的要求并不像上面提到的那么简单。我不能在这里显示我所有的代码,所以我试图用简单的代码行发布类似的问题。但是请考虑我在循环定义的部分和部分都是用条件写的地方使用这个部分,所以您的建议解决方案对我来说不起作用,尽管您的意图是正确的。在我上面的例子中,我能做些什么来代替下一步的工作吗?engineersmnky-谢谢!这听起来很合理。我让它与
一起工作,除非
改为
next
。我理解
next
不能在块的上下文之外使用,并且有充分的理由。
[nil,2,3,nil,4].map {|n| some_method(n) } # sure kind of makes sense
#but what happens when I call
some_method(nil)
#how would you like it to use the next call here
#next what; there is no next; you have reached the end of the universe 
<div>
    <% [1,2,3,4,5].each do |el| %>
        <%= render partial: "element", locals: {el: el} %>
    <% end %>
</div>
 <%= content_tag(:span,el) unless el == 1 %>
 <span>Whatever el is here</span>