1

include検索している配列が割り当てられていない可能性がある場合に使用する1行の方法はありますか?

私は多くのバリエーションを試しました

(foo || []).include?(:bar)

しかし、成功せずに

4

4 に答える 4

3

foo本当に がnilundefined ではなく である場合は、必要なことを行いますが、 がまだ何も設定されていない(foo || []).include?(:bar)場合は、 を取得するので、より長いワンライナーで確認できます...fooNameError

defined?(foo) ? (foo || []).include?(:bar) : false
于 2012-08-28T18:39:50.657 に答える
2
(foo ||= []).include?(:bar)

それはトリックを行います。

于 2012-08-28T19:20:51.437 に答える
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 パーシャルを使用するビューでは:

 <% 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、上記のコードに従ってデフォルト値が与えられます。

于 2012-08-31T16:54:28.790 に答える
0

もしかしてこれ?

foo.includes? :bar if foo
于 2012-08-28T18:36:31.550 に答える