如果可能没有分配它正在搜索的数组,是否有使用include
的单行方式?
我尝试了很多
的变体(foo || []).include?(:bar)
但没有成功
答案 0 :(得分:3)
如果foo
确实是nil
,而不是未定义,那么(foo || []).include?(:bar)
将会执行您想要的操作,但如果foo
未设置为任何内容,那么您将获得NameError
,以便我们可以使用更长的oneliner来检查...
defined?(foo) ? (foo || []).include?(:bar) : false
答案 1 :(得分:2)
(foo ||= []).include?(:bar)
这样就可以了。
答案 2 :(得分:0)
也许这个?
foo.includes? :bar if foo
答案 3 :(得分:0)
由于您使用的是部分内容,请将其置于部分内容之上:
<% 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 partial的视图中:
<% render :partial => "foo", :locals {:a => 1, :foo => [2, 3, 4]} %>
<% render :partial => "foo", :locals {:a => 1} %>
在第一种情况下,foo partial中的foo
变量为[2,3,4]
。
在第二种情况下,foo
变量不会放在local_assigns
中,因此将根据上面的代码给出默认值。