Rails: `next` 方法在将其移动到 rails 部分后停止工作 - 下一个错误无效
Rails: `next` method stops working after moving it to rails partial - Invalid next error
我当前的 ERB
文件如下(工作正常),
<div>
<% [1,2,3,4,5].each do |el| %>
<% next if (el == 1) %>
<span><%= el %></span>
<% end %>
</div>
在我尝试重构代码并使用 rails 部分后,它看起来如下,
<div>
<% [1,2,3,4,5].each do |el| %>
<%= render partial: "element", locals: {el: el} %>
<% end %>
</div>
而我的部分 _element.html.erb
是,
<% next if (el == 1) %>
<span><%= el %></span>
此重构导致问题 SyntaxError (_element.html.erb:40: Invalid next)
我不确定为什么 next
在将其移动到部分后停止工作。任何解决方法将不胜感激。
提前致谢!
您当前问题的答案:
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>
部分_element.html.erb
<%= content_tag(:span,el) unless el == 1 %>
您可以用 el == 1
代替您的实际情况,但如果条件为真,则不会呈现 span 标签,否则会呈现
<span>Whatever el is here</span>
#content_tag
Docs 因为我发现它比使用 html_safe
或 raw
好多了,除非你真的需要。
请记住,部分被编译到动态生成的视图 class 中的方法中,您可以通过替换 return
而不是 next
来获得所需的效果。它将使部分模板的渲染短路,循环将继续枚举的下一个元素。
因此您的部分 _element.html.erb
将显示为:
<% return if (el == 1) %>
<span><%= el %></span>
我当前的 ERB
文件如下(工作正常),
<div>
<% [1,2,3,4,5].each do |el| %>
<% next if (el == 1) %>
<span><%= el %></span>
<% end %>
</div>
在我尝试重构代码并使用 rails 部分后,它看起来如下,
<div>
<% [1,2,3,4,5].each do |el| %>
<%= render partial: "element", locals: {el: el} %>
<% end %>
</div>
而我的部分 _element.html.erb
是,
<% next if (el == 1) %>
<span><%= el %></span>
此重构导致问题 SyntaxError (_element.html.erb:40: Invalid next)
我不确定为什么 next
在将其移动到部分后停止工作。任何解决方法将不胜感激。
提前致谢!
您当前问题的答案:
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>
部分_element.html.erb
<%= content_tag(:span,el) unless el == 1 %>
您可以用 el == 1
代替您的实际情况,但如果条件为真,则不会呈现 span 标签,否则会呈现
<span>Whatever el is here</span>
#content_tag
Docs 因为我发现它比使用 html_safe
或 raw
好多了,除非你真的需要。
请记住,部分被编译到动态生成的视图 class 中的方法中,您可以通过替换 return
而不是 next
来获得所需的效果。它将使部分模板的渲染短路,循环将继续枚举的下一个元素。
因此您的部分 _element.html.erb
将显示为:
<% return if (el == 1) %>
<span><%= el %></span>