Rails 5.1 minitest flattens array of arrays in params 参数

Rails 5.1 minitest flattens array of arrays in params

从 Rails 4.2 升级到 5.1 后,似乎仅用于测试,当我提供如下内容时:

post :create, params: {
  model: {
    prices: [[2000, "EUR"], [2113.56, "USD"]],
    estimates: [[50, 2500, "EUR"], [505, 2600, "USD"]]
  }
}

然后在控制器的参数中解析为:

prices: [["2000"], ["EUR"], ["2113.56"], ["USD"]]
estimates: [["50"], ["2500"], ["EUR"], ["505"], ["2600"], ["USD"]]

幸运的是,对控制器的实际调用被正确解析。 显然,我需要修复测试,所以非常感谢任何帮助!

找了很久的答案..

我们认为只有: @request.headers['Accept'] = 'application/json' 在设置中没问题。

但我们还必须包括: @request.headers['Content-Type'] = 'application/json' 为了正确解析参数!

添加as: :json选项:

post :create, as: :json, params: {
  model: {
    prices: [[2000, "EUR"], [2113.56, "USD"]],
     estimates: [[50, 2500, "EUR"], [505, 2600, "USD"]]
  }
}