0

我有一个测试 api 应用程序,我正在使用它在控制器中使用不同的操作。但我无法正确实施。

这个控制器没有模型。它只是将控制权委托给某些服务。我无法将发布数据发送到操作。

class SimplexController < ApplicationController
    def initiate_request
        response = SimplexServices.new.initiate_request simplex_params
        render json: response
    end


    def update_kyc
        response = SimplexServices.new.initiate_kyc update_kyc_params
        render json: response
    end

    private 
    def simplex_params
        params.permit!
    end

    def update_kyc_params
        params.permit!
    end
end

对于initial_request ,我在正文中有一个帖子数据,如下所示

{
  "account_details": {
    "logins": [
      {
        "id": "200",
        "ip": "192.117.97.229",
        "uaid": "c387c6q6sr27csbuftfvq9v652",
        "timestamp": "2017-06-18T11:20:25Z",
        "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36",
        "is_api_initiated": false,
        "http_accept_language": "en-US,en;q=0.8,he;q=0.6"
      }
    ],
    "is_2fa_enabled": false,
    "partner_end_user_id": "246915",
    "identity_kyc_details": {
      "last_name": "Durden",
      "first_name": "Tyler",
      "document_id": "AB7654321"
    },
    "last_kyc_verification_timestamp": "2015-12-31T16:03:47Z"
  },
  "personal_details": {
    "email": "tylerdurden@paperstsoap.com",
    "phone": "+12885550153",
    "gender": "m",
    "address": {
      "zip": "19808",
      "city": "Bradford",
      "country": "US",
      "state": "DE",
      "address_line_1": "537 Paper street"
    },
    "last_name": "Durden",
    "first_name": "Tyler",
    "middle_name": "",
    "date_of_birth_ts": "1972-02-22T12:00:00Z"
  },
  "transaction_details": {
    "last_20_txs": [],
    "current_balance": {
      "amount": 0,
      "currency": "usd"
    },
    "payment_details": {
      "order_id": "PRTNR135791",
      "payment_id": "E98986D8-03C0-D777-07CD-C56496E2F266",
      "fiat_total_amount": {
        "amount": 1433.25,
        "currency": "usd"
      },
      "payment_flow_type": "deposit",
      "destination_wallet": {
        "address": "16M8D1ZgkWjziw8BaJDT4w1uBF4whfG7mW",
        "currency": "btc"
      }
    }
  }
}

下面的update_kyc是发布请求

{
  "documents": [
    {
      "document_type_id": "1",
      "document_number": "doc123"
    },
    {
      "document_type_id": "2",
      "document_number": "doc456"
    }
  ]
}

我将如何在我的控制器中允许这样做?

现在我允许一切使用下面的代码。但允许一切都是不好的。

private 
def simplex_params
  params.permit!
end

我必须如何在控制器中实现这种情况?

谢谢, 阿吉斯

4

1 回答 1

0

首先关于许可证的使用,这取决于要求。如果相关数据不敏感,您可以跳过许可并让所有参数在批量更新中更新。当模型包含密码、角色等敏感数据时,许可证主要用于保护应用程序免受大规模分配。

当 json 数据传递给 Rails api 时,可以在 params 上使用 permit,只需选择 key 并根据需要向下 hash 即可。从文档:

   params = ActionController::Parameters.new({
   person: {
   name: "Francesco",
   age:  22,
   role: "admin"
     }
   })

permitted = params.require(:person).permit(:name, :age)
permitted            # => <ActionController::Parameters {"name"=>"Francesco", "age"=>22} permitted: true>

在您的情况下,解析 JSON 并删除不需要的键

于 2018-06-21T07:05:55.293 回答