Rails — массив хэшей в Grape API

#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
  

И поэтому ожидается, что каждый элемент в массиве будет соответствовать полям в данном блоке.