试图找出如何根据条件在哈希中包含项目时遇到了一些问题。
我尝试过使用||=
运算符,我也尝试过三元语法,但似乎总是抛出语法错误。
我有一个有效的解决方案,我只知道必须有更优雅的方法来做到这一点。
我在控制器中有这个代码来处理我的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)
它有效,但它有很多重复,我只能看到它变得更糟
答案 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!
所需的属性。