2016-10-11 136 views
1

哈希阵列我真的很新的家伙Rails的,在我的项目,我想提出一个JSON字符串葡萄API。正如你所看到的,我的JSON有一个包含许多对象的user数组。我怎样才能在我的葡萄中定义它?
谢谢导轨 - 葡萄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_namephone_number一个user散,所以不正是你所期待的。

使用块,组,要求和可选接受额外的选项类型,可以是数组或哈希,并且默认为数组。 根据值,嵌套参数将被视为哈希值或数组中的哈希值。

来源: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 

这样一来,阵列中的每个项目将有望匹配给定块中的字段。