Rails erb检查是否存在并执行每个操作

时间:2015-06-23 14:15:46

标签: ruby-on-rails ruby loops conditional-statements

在一个erb文档中,我有一个可能未定义的数组。所以我检查是否存在,如果它存在,我就这样迭代:

element = all("tbody tr.#{Post}")
element.count

我想知道我是否可以在一条线上拥有条件和循环。

你有什么想法吗?

5 个答案:

答案 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 %>