【问题标题】:Error occurred while parsing request parameters. - Rails API解析请求参数时出错。 - 导轨 API
【发布时间】:2021-04-16 17:50:43
【问题描述】:

所以我在我拥有的“charge”方法上传递了一个 post 方法,但我不断收到 400 个错误请求。

这是路由和输入的json:

POST http://localhost:3000/users/:user_id/accounts/:account_id/credit_card/:credit_card_id/charge'
Content-Type: application/json

{
"created": "8526798985", 
"amount": "2000",
"currency": "usd",
}

这是收费方式:

  def charge
    transaction = Transaction.new(transaction_params)  
    transaction.credit_card_id = @credit_card.id
    if transaction.valid?
      transaction.save
      new_transaction = { id: transaction.id, created: transaction.created, status: transaction.status, amount: transaction.amount.to_i, currency: transaction.currency, credit_card_id: transaction.credit_card_id }
      render json: new_transaction
    else
      error_json = { error: "Invalid inputs" }
      render json: error_json, status: 400
    end
  end

这也是 transaction_params 方法

  def transaction_params
  params.require(:transaction).permit(:created, :amount, :currency)
  end

错误

Error occurred while parsing request parameters.
Contents:

{
"created": "8526798985",
"amount": "2000",
"currency": "usd",
}

我在这里缺少什么?我做了另一个 api,效果很好

【问题讨论】:

  • 您的 JSON 没有 transaction 节点作为 transaction_params 所需的包装器
  • 你应该使用if transaction.save而不是.valid?,因为后者并不能确保记录被实际保存。

标签: ruby-on-rails json ruby api


【解决方案1】:

您的强大参数期待:

{
  "transaction: {
    {
      "created": "8526798985", 
      "amount": "2000",
      "currency": "usd",
    }
  }
}

但你正在提供它:

{
  "created": "8526798985", 
  "amount": "2000",
  "currency": "usd",
}

一种解决方案是更改请求正文在前端的组合方式,或者您可以将transaction_params 更新为:

def transaction_params
  params.permit(:created, :amount, :currency)
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    相关资源
    最近更新 更多