代码之家  ›  专栏  ›  技术社区  ›  Luiz E.

Apipie接收整数参数作为字符串

  •  0
  • Luiz E.  · 技术社区  · 6 年前

    我有以下RSpec测试:

     it 'should not list alerts, since I do not have access to this model' do
       get :index, params: { model_id: @model2.id, workspace_id: @workspace.id }, as: :json
       expect(response).to have_http_status(:forbidden)
     end
    

    它之所以失败是因为Apipie在抱怨 workspace_id 是一个字符串,而实际上不是,它是一个整数。我调试了电话,检查过了 @workspace id 绝对是一个整数。

    现在我看到了这个问题,因为我正在将应用程序迁移到Rails5.2.0(以前是Rails4)。

    有人见过这样的东西吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Roman Kiselenko    6 年前

    这个 GET 当您尝试发送一些有效负载时,请求不包含正文。如果是 请求作为url查询传递的所有参数(例如。 /index?model_id=1&workspace_id=1

    这里有两个选项:

    • 改变 得到 POST ,它将允许使用body请求。
    • 在操作中将字符串转换为整数。
        2
  •  0
  •   JosephK    5 年前

    我发现让rack test将字符串以外的任何内容作为值发送的唯一方法是重写请求方法,如下所述: https://stackoverflow.com/a/37234290/2326613

    还有一个问题,BigDecimal值被“as::json”强制放入字符串中-不影响OP(id是整数),但其他人可能通过搜索找到这个问题。要修复的解决方法 那个 bug被Rails团队贬低并删除。因此,为了能够遵循JSON使用者可能期望的JSON约定(vs Rails约定),您需要重写BigDecimal-as\ujson方法来修复它: https://github.com/rails/rails/issues/25017