2012-06-10 22 views
7

Railsの*args配列に条件付きでハッシュを追加するにはどうすればよいですか?私は元の値が存在するならば、それを踏みにじりたくない。* argsにハッシュを追加するにはどうすればよいですか?

たとえば、私は配列を受け取る方法があります:

def foo(*args) 
    # I want to insert {style: 'bar'} into args but only if !style.present? 
    bar(*args)        # do some other stuff 
end 

を私はレールによって提供さextract_optionsとreverse_mergeメソッドを使用して開始しました:

def foo(*args) 
    options = args.extract_options!   # remove the option hashes 
    options.reverse_merge! {style: 'bar'} # modify them 
    args << options       # put them back into the array 
    bar(*args)        # do some other stuff 
end 

それは動作しますが、冗長なようで、それほどルビー・イッシュではない。私は何かを逃したように感じる。

+1

あなたはそれを 'args'リストに戻す必要がありますか?最初の2つはRailsソースでは共通していると思います。 –

+1

良い質問です。はい、関数 'foo'はargsを別の関数に渡します。それを示すために質問を編集します。私はFormBuilderクラスを書いています。多くのヘルパーが他のヘルパーを呼びます。 – IAmNaN

答えて

7

はい、#extract_options!は、Railsでそれを行う方法です。より洗練されたものにしたい場合は、それをエイリアスにするか、この必要性を処理する独自の方法を見つけるか、既にそれを行った人によって宝石を検索する必要があります。

+1

ありがとう、私はフィードバックを感謝します。 – IAmNaN

関連する問題