2016-10-11 26 views
1

私は本当にRailsの新しい人です。私のプロジェクトでは、Grape APIにJSON文字列を送信したいと考えています。ご覧のとおり、JSONには多くのオブジェクトを含むuser配列があります。どのように私のぶどうにそれを定義できますか?
Rails - Grape APIのハッシュ配列

{ 
    "users":[ 
     { 
      "first_name":"Brittany", 
      "last_name":"Chen", 
      "email":"[email protected]", 
      "phone_number":"+29-46-957-15423" 
     }, 
     { 
      "first_name":"Lynn", 
      "last_name":"Brooks", 
      "email":"[email protected]", 
      "phone_number":"+84-95-185-00137" 
     }, 
     { 
      "first_name":"Claire", 
      "last_name":"Paul", 
      "email":"[email protected]", 
      "phone_number":"+66-64-893-53401" 
     }, 
     { 
      "first_name":"Gemma", 
      "last_name":"Carter", 
      "email":"[email protected]", 
      "phone_number":"+83-46-325-54538" 
     } 
    ], 
    "service_ids":["1", "2", "3"], 
    "auth_token":"xxxxxxxxxxxxxxxxxxxxxx" 
} 

ありがとうこれは私のブドウのparams

params do 
    optional :user, type: Hash do 
     optional :email, type: String, desc: "user email" 
     optional :first_name, type: String, desc: "user first name" 
     optional :last_name, type: String, desc: "user last name" 
     optional :phone_number, type: String, desc: "user phone number" 
    end 
    optional :service_ids, type: Array[Integer], desc: "list of service ids selected" 
    requires :auth_token, type: String, desc: "authentication_token" 
end 
+0

同じソリューションが必要ですか? –

答えて

1

がこれはブドウの "ネストされたパラメータの検証" と呼ばれています。あなたのコードでは、実際にはハッシュのオプションパラメータemailfirst_namelast_name、およびphone_numberが含まれています。

ブロック、グループ、必須およびオプションで、追加のオプションタイプを受け入れることができます。これには、ArrayまたはHashのいずれかを指定できます。デフォルトはArrayです。 値に応じて、ネストされたパラメータは、ハッシュ値として、または配列内のハッシュ値として扱われます。

出典:https://github.com/ruby-grape/grape#validation-of-nested-parameters

だからあなたの場合には、あなたはこのようなあなたのparamsを記述する必要があります:

params do 
    optional :users, type: Array do 
    optional :email,  type: String, desc: "user email" 
    optional :first_name, type: String, desc: "user first name" 
    optional :last_name, type: String, desc: "user last name" 
    optional :phone_number, type: String, desc: "user phone number" 
    end 
    # ... 
    # any other params 
    # ... 
end 

だから、配列内の各項目が一致することが期待されます指定されたブロックのフィールド。

関連する問題