Ruby on rails 接受哈希或哈希数组作为Ruby方法的参数
我的方法是:Ruby on rails 接受哈希或哈希数组作为Ruby方法的参数,ruby-on-rails,ruby,Ruby On Rails,Ruby,我的方法是: def self.store(params) params.each { } end 如果我传递一个散列数组,它将非常有效: params = [ { key: 'value' }, { key: 'value' } ] params = { key: 'value' } 但是,我可能只想传递一个散列,而不是一个散列数组: params = [ { key: 'value' }, { key: 'value' } ] params = { key: 'value' }
def self.store(params)
params.each { }
end
如果我传递一个散列数组,它将非常有效:
params = [ { key: 'value' }, { key: 'value' } ]
params = { key: 'value' }
但是,我可能只想传递一个散列,而不是一个散列数组:
params = [ { key: 'value' }, { key: 'value' } ]
params = { key: 'value' }
将散列转换为散列数组的最干净的Ruby方法是什么?
Array()方法是一种确保始终返回数组的方法,但当散列被传递时,它将转换为数组本身
Array({ key: 'value' }) => [[:key, 'value']]
我需要的是:
{ key: 'value' } => [ { key: 'value' } ]
有什么好方法可以实现这一点,或者我必须用Is_a?(数组)进行手动类型检查吗?试试这个
def self.store(params)
params = [params].flatten
...
end
对我来说,最好的解决方案是将方法更改为:
def self.store(*hashes)
params = hashes.flatten
puts params.inspect
end
- 如果传递一个散列,它将是一个数组
- 如果传递一个哈希数组,它将保持不变
- 如果对N个散列进行pase,它会将所有参数压缩为一维数组
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'}]
我会这样做:
def self.store(params)
(params.is_a?(Array) ? params : [params]).each {|single_hash| }
end