根据Ruby哈希中的条件创建键值对

时间:2014-09-22 03:18:48

标签: ruby-on-rails ruby hashmap

试图找出如何根据条件在哈希中包含项目时遇到了一些问题。

我尝试过使用||=运算符,我也尝试过三元语法,但似乎总是抛出语法错误。

我有一个有效的解决方案,我只知道必须有更优雅的方法来做到这一点。

我在控制器中有这个代码来处理我的Amazon API请求;如果您选择SearchIndex以外的All,我只允许对结果进行排序。

if params[:searchindex] = "All"
  parameters= {
      'SearchIndex' => params[:searchIndex],
      'Keywords' => params[:search_term],
      'ResponseGroup' => 'ItemAttributes'
    }
else
  parameters = {
    'SearchIndex' => params[:searchindex],
      'Sort' => 'salesrank' ,
      'Keywords' => params[:search_term],
      'ResponseGroup' => "ItemAttributes,Images"
      }
end

res = req.item_search(query: parameters)

它有效,但它有很多重复,我只能看到它变得更糟

1 个答案:

答案 0 :(得分:0)

您可以使用Hash#merge!方法根据条件合并唯一键值对。

parameters= {
  'SearchIndex' => params[:searchIndex],
  'Keywords' => params[:search_term]
}

case params[:searchindex]
when 'All'
  parameters.merge!({ :'ResponseGroup' => 'ItemAttributes' }) 
else
  parameters.merge!({ :'ResponseGroup' => 'ItemAttributes,Images', :'Sort' => 'salesrank' })
end

对于其他每个searchindex,您都会添加when...条件和merge!所需的属性。