#ruby-on-rails #json #grape #grape-api
#ruby-on-rails #json #ruby-grape #grape-api
Вопрос:
Я действительно новичок в Rails, в моем проекте я хочу отправить строку JSON в Grape API. Как вы можете видеть, мой JSON имеет user
массив, содержащий много объектов. Как я могу определить это в моем Grape?
Спасибо
{
"users":[
{
"first_name":"Brittany",
"last_name":"Chen",
"email":"comstock@mailinator.com",
"phone_number":" 29-46-957-15423"
},
{
"first_name":"Lynn",
"last_name":"Brooks",
"email":"jensen@mailinator.com",
"phone_number":" 84-95-185-00137"
},
{
"first_name":"Claire",
"last_name":"Paul",
"email":"mei@mailinator.com",
"phone_number":" 66-64-893-53401"
},
{
"first_name":"Gemma",
"last_name":"Carter",
"email":"malik@mailinator.com",
"phone_number":" 83-46-325-54538"
}
],
"service_ids":["1", "2", "3"],
"auth_token":"xxxxxxxxxxxxxxxxxxxxxx"
}
это мои параметры Grape
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
Комментарии:
1. Мне нужно то же самое, какое-либо решение, которое вы нашли?
Ответ №1:
В Grape это называется «Проверка вложенных параметров». В вашем коде вы фактически запрашивали user
хэш, содержащий необязательные параметры email
, first_name
, last_name
и phone_number
, так что это не совсем то, что вы искали.
С помощью block , group, requires и optional примите дополнительный тип параметра, который может быть либо Array, либо Hash, а по умолчанию — Array . В зависимости от значения вложенные параметры будут обрабатываться либо как значения хэша, либо как значения хэшей в массиве.
Источник: https://github.com/ruby-grape/grape#validation-of-nested-parameters
Итак, в вашем случае вам нужно будет описать свои параметры следующим образом :
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
И поэтому ожидается, что каждый элемент в массиве будет соответствовать полям в данном блоке.