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 %>
在一份 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 %>