10

値がある場合とない場合があるハッシュからプルするときに、エラー メッセージが表示されないようにしています。値を返すか、nil を返すようにします。

メソッドでそれができると思ってtryいましたが、まだエラーが発生しています。

key not found: "en"

content私のハッシュは...content['en']などと呼ばれる hstore 列です。

content = {"es"=>"This is an amazing event!!!!!", "pl"=>"Gonna be crap!"}

方法を試す

@object.content.try(:fetch, 'en') # should return nil, but errors even with try method

私はこれがうまくいくと思ったが、うまくいかない。nilエラーの代わりにどのように返すことができますか?

また、コンテンツ フィールド自体もスローnilを呼び出す可能性があります。content['en']

undefined method `content' for nil:NilClass
4

4 に答える 4

24

を許可する必要がある場合はobject.content.nil?、 を使用しますtry。不足しているキーを許可したい場合は、fetchプリティが指摘するように)望ましくないため、通常の[]方法が必要です。2 つの収量を組み合わせると、次のようになります。

object.content.try(:[], 'en')

観察:

> h = { :a => :b }
 => {:a=>:b} 
> h.try(:[], :a)
 => :b 
> h.try(:[], :c)
 => nil 
> h = nil
 => nil 
> h.try(:[], :a)
 => nil

あなたをからかっているように見えるobject.content.try(:fetch, 'en', nil)場合にも使用できます。:[]

于 2013-06-29T17:19:51.230 に答える
10

Hash#fetchを参照してください

指定されたキーのハッシュから値を返します。キーが見つからない場合、いくつかのオプションがあります: 他の引数がない場合、 KeyError 例外が発生します。デフォルトが指定されている場合は、それが返されます。オプションのコード ブロックが指定されている場合は、それが実行され、その結果が返されます。

h = { "a" => 100, "b" => 200 }
h.fetch("z")
# ~> -:17:in `fetch': key not found: "z" (KeyError)

だから使用:

h = { "a" => 100, "b" => 200 }
h.fetch("z",nil)
# => nil
h.fetch("a",nil)
# => 100
于 2013-06-29T16:57:44.453 に答える
3

通常のインデックスを使用するだけです:

content['en'] #=> nil
于 2013-06-29T16:56:14.423 に答える