include
如果它正在搜索的数组可能未分配,是否有一种使用方式?
我已经尝试了很多变种
(foo || []).include?(:bar)
但没有成功
如果foo
真的是nil
,而不是未定义,那么(foo || []).include?(:bar)
会做你想做的事,但是如果foo
还没有设置任何东西,那么你会得到一个NameError
,所以我们可以用更长的oneliner检查它......
defined?(foo) ? (foo || []).include?(:bar) : false
(foo ||= []).include?(:bar)
那会成功的。
也许这个?
foo.includes? :bar if foo
由于您使用的是部分,因此将其放在部分的顶部:
<% foo = [] unless local_assigns.has_key?(:foo) # for Arrays %>
<% foo = {} unless local_assigns.has_key?(:foo) # for Hashes %>
<% foo = "" unless local_assigns.has_key?(:foo) # for Strings %>
等等
这是检查部分中使用的变量是否已设置的正确方法。
在使用 foo 部分的视图中:
<% render :partial => "foo", :locals {:a => 1, :foo => [2, 3, 4]} %>
<% render :partial => "foo", :locals {:a => 1} %>
在第一种情况下,foo
变量将[2,3,4]
位于 foo 部分中。
在第二种情况下,foo
变量不会被放入,local_assigns
因此将按照上面的代码被赋予一个默认值。