Rails params to array

时间:2017-03-28 06:28:11

标签: ruby-on-rails ruby

我将从PHP文件中选择的复选框列表发送到我们的Rails API服务器。所有选中项目的ID将以json格式发送(campaign_ids来自PHP的json_encode):

我有一个URL传递给我们的API

 Started PUT "/campaigns/function.json?campaign_ids=["6","7"]&user_id=0090000007"

我需要获取campaign_ids ["6","7"]并使用array.each do || end

处理任何其他数组

如何将其转换为数组,以便我可以使用array.each

以下示例代码可以实现它,但我认为可能有更好的方法吗?

campaign_ids = params[:campaign_ids].to_s          # [\"6\",\"7\"]
campaign_ids = campaign_ids.gsub(/[^0-9,]/,'')     # 6,7

if campaign_ids.size.to_i > 0                      # 3 ??
   campaign_ids.split(",").each do |campaign_id|   
      ...
   end
end

3 个答案:

答案 0 :(得分:4)

网址的正确格式应为campaign_ids[]=6&campaign_ids[]=7。当你执行params [:campaign_ids]时,这会自动产生一个[6, 7]数组。

但假设您无法更改错误参数的格式,您仍然可以通过JSON.parse(params[:campaign_ids])

获取该格式

答案 1 :(得分:2)

试试这个

campaign_ids = JSON.parse(params[:campaign_ids])

您将params[:campaign_ids]作为字符串。 因此,您必须解析该json字符串以获取数组元素。

答案 2 :(得分:-1)

params [:campaign_ids]已经是您想要的数组格式,您无需使用to_s将其转换为字符串。

你可以做这样的事情

campaign_ids = params[:campaign_ids]

campaign_ids.each do |campaign_id|
  # do the computation here
end