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

问题描述 投票:2回答:5

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

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

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

你有好主意吗 ?

ruby-on-rails ruby loops condition
5个回答
3
投票

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

@my_array ||= []

这样.each调用仍然可以工作,但不会循环,因为数组是空的,所以你不需要检查它。


1
投票

你可以利用nil.to_a[]的事实,而Array#to_a只是返回自己,没有改变。

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

但这取决于“可能不存在”,我认为这意味着“可能是nil”。 例如,false.to_a将不起作用。


1
投票

你可以在每个区块上调用#try。这需要添加一些代码,但请记住using try is considered by some to be a code smell

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

0
投票

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

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

0
投票

我认为使用&.是要走的路

<% my_array&.each do |item| %>
  <%# do stuff %>
<% end %>
© www.soinside.com 2019 - 2024. All rights reserved.