include
検索している配列が割り当てられていない可能性がある場合に使用する1行の方法はありますか?
私は多くのバリエーションを試しました
(foo || []).include?(:bar)
しかし、成功せずに
foo
本当に がnil
undefined ではなく である場合は、必要なことを行いますが、 がまだ何も設定されていない(foo || []).include?(:bar)
場合は、 を取得するので、より長いワンライナーで確認できます...foo
NameError
defined?(foo) ? (foo || []).include?(:bar) : false
(foo ||= []).include?(:bar)
それはトリックを行います。
パーシャルを使用しているため、これをパーシャルの上に置きます。
<% 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 パーシャルにあります。
2 番目のケースでは、foo
変数は入れられないためlocal_assigns
、上記のコードに従ってデフォルト値が与えられます。
もしかしてこれ?
foo.includes? :bar if foo