7

私は方法を持っています:

def self.store(params)
  params.each { }
end

ハッシュの配列を渡すと、完全に機能します。

params = [ { key: 'value' }, { key: 'value' } ]

ただし、ハッシュの配列ではなく、単一のハッシュのみを渡したい場合があります。

params = { key: 'value' }

ハッシュをハッシュの配列に変換する最もクリーンなRubyの方法は何でしょうか?

Array()メソッドは、配列が常に返されることを保証しますが、ハッシュが渡されると、配列自体に変換されます。

Array({ key: 'value' }) => [[:key, 'value']]

必要なもの:

 { key: 'value' } => [ { key: 'value' } ]

これを実装するための良い方法はありますか、それともis_aを使用して手動で型チェックを行う必要がありますか?(配列)?

4

3 に答える 3

8

私にとって、最善の解決策は、メソッドを次のように変更することです。

def self.store(*hashes)
  params = hashes.flatten
  puts params.inspect
end
  • 単一のハッシュを渡すと、配列になります
  • ハッシュの配列を渡す場合、それは同じままです
  • N 個のハッシュを渡すと、すべてのパラメーターが 1 次元配列に圧縮されます。

好きなものを渡すことができます。

self.store({:key => 'value'}) # => [{:key => 'value'}]
self.store({:key => 'value'}, {:foo => 'bar'}) # => [{:key => 'value'}, {:foo => 'bar'}]
self.store([{:key => 'value'}, {:foo => 'bar'}]) # => [{:key => 'value'}, {:foo => 'bar'}]
于 2012-08-13T19:19:33.000 に答える
3

これを試して

def self.store(params)
  params = [params].flatten
  ...
end
于 2012-08-13T17:48:58.293 に答える