0

パラメータがハッシュである関数を呼び出す必要があります。そのパラメーターには、ハッシュと、マージする必要がある属性があります。これを行うには、正しく機能する次のコードを使用します。

paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where({:att0=> "0"}.merge(paramsHash))

前述のとおり、これは機能しますが、問題はありません。私の質問は、これに素敵なルビーファンシーな方法はありますか? 何かのようなもの

paramsHash={:att1=> "1", :att2=>"2"} #this is obtained from a function
result=MyClass.where(:att0=> "0", paramsHash.as_params)

ありがとう

4

1 に答える 1

2

これを行うには より手の込んだ方法はありませんmerge。中かっこを取り除くことができるように、逆に書くだけです。

result = MyClass.where(params_hash.merge(att0: "0"))

これは、あなたのコードを書く上で私が考える最も素晴らしい方法です。ただし、ハッシュがマージされる方法は変更されます。これにより、質問で提示したコードに違いはありませんが、両方のハッシュに同じキーが存在する場合は違いが生じる可能性があります。

ルビーをより魅力的にするためのその他のこと:

  • ruby ではローカル変数はキャメルケースではなくアンダーライン表記を使うのが一般的なのでparams_hash、and not paramsHash.
  • 代入演算子、代入される変数、および代入の間のスペースは共通です: result = 'this'and notresult='this'
  • ハッシュのキーと値のペアと同じです: Ruby 1.9 では{:this => 'is a hash'}なく、ハッシュキーとしてのシンボルの Ruby 1.9 表記法である を{:this=>'is a hash'}行うこともできます。{this: 'is a hash'}
  • 一部の ruby​​ist は、オプションのブレースを軽減することを好みます。必要に応じて、それも可能です。

    result = MyClass.where params_hash.merge(att0: "0")

    また

    result = MyClass.where(params_hash.merge att0: "0")

于 2013-02-07T15:22:11.257 に答える