Rails erb 检查是否存在并做每一个

Rails erb check if exist and do each

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

<% if defined? my_array %>
  <% my_array.each do |item| %>
    <%# do stuff %>
  <% end %>
<% end %>

而且我想知道是否可以在一行中包含条件和循环。

你有想法吗?

我觉得它不是很地道,但你可以这样做:

<% my_array.each do |item| %>
  <%# do stuff %>
<% end if defined? my_array %>

我认为更好的方法是在可能的情况下从控制器初始化数组,例如

@my_array ||= []

这样 .each 调用仍然有效,但不会循环,因为数组是空的,因此您不需要检查它。

您可以在每个块上调用 #try。这将需要添加少量代码,但请记住 using try is considered by some to be a code smell.

<% my_array.try(:each) do |item| %>
  <%# do stuff %>
<% end %>

您可以利用以下事实:nil.to_a[],而 Array#to_a 只是 returns 本身,没有改变。

<% my_array.to_a.each do |item| %>
  <%# do stuff %>
<% end %>

但这取决于什么是 "may not exist",我认为这意味着 "may be nil"。
例如,false.to_a 将不起作用。

我认为使用 &. 是可行的方法

<% my_array&.each do |item| %>
  <%# do stuff %>
<% end %>