在一个erb文档中,我有一个可能未定义的数组。所以我检查是否存在,如果它存在,我就这样迭代:
element = all("tbody tr.#{Post}")
element.count
我想知道我是否可以在一条线上拥有条件和循环。
你有什么想法吗?
答案 0 :(得分:3)
我认为更好的方法是尽可能从控制器初始化数组,例如
@my_array ||= []
这样.each
调用仍然有效,但不会循环,因为数组是空的,所以你不需要检查它。
答案 1 :(得分:1)
您可以在每个区块上调用#try
。这需要添加少量代码,但请记住using try is considered by some to be a code smell。
<% my_array.try(:each) do |item| %>
<%# do stuff %>
<% end %>
答案 2 :(得分:1)
您可以利用nil.to_a
为[]
的事实,Array#to_a
只会返回自己,不会改变。
<% my_array.to_a.each do |item| %>
<%# do stuff %>
<% end %>
但这取决于“可能不存在”,我认为这意味着“可能是nil
”
例如,false.to_a
将不起作用。
答案 3 :(得分:0)
我觉得这不是很惯用,但你可以这样做:
<% my_array.each do |item| %>
<%# do stuff %>
<% end if defined? my_array %>
答案 4 :(得分:0)
我认为使用&.
是一种方法
<% my_array&.each do |item| %>
<%# do stuff %>
<% end %>