Получение массива в POST в Rails API - PullRequest
0 голосов
/ 22 мая 2018

Я создаю Rails API и пытаюсь получить массив через запрос post.На POSTMAN мой запрос:

{
    "user": {
        "email": "testuser2@gmail.com",
        "first_name": "Joao Paulo",
        "last_name": "Furtado Silva",
        "city_id": 384,
        "province_id": 2,
        "cuisines": [17,5,2],
        "password":"123456",
        "password_confirmation":"123456"
    }
}

На модели пользователя:

validates :first_name, :last_name, :city_id, :province_id, :cuisines, :password, :password_confirmation, :presence => true

И на User_controller:

def user_params
  params.require(:user).permit(:email, :first_name, :last_name, :city_id, :province_id, :password, :password_confirmation, :cuisines)
end

Даже если я передам свой массив кухоньк бэкэнду, Rails не распознает это.В качестве ответа API он говорит:

{
  "status": "Error",
  "message": [
    "Cuisines can't be blank"
  ]
}

Что я здесь не так делаю?

Если я уберу :cuisines из проверки, он будет работать нормально.Но я не должен этого делать.Каков наилучший способ решения этой проблемы?

РЕШЕНИЕ SO FAR:

Я удалил :cuisines автоматическую проверку из Rails и проверил ее вручную в простом коде, таком как:

#validate cuisines
@cuisines = params.require(:user)[:cuisines] #it comes in array format

if @cuisines.empty?
  render json: {
    status: 'Error',
    message: 'User cuisines are empty',
  }, status: :precondition_failed

  return false
end

Если у кого-то есть лучшее решение, пожалуйста, напишите.

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы используете POSTMAN, попробуйте отправить его с данными формы. Пожалуйста, проверьте изображение ниже

enter image description here

и в вашем методе разрешения, пожалуйста, добавьте кухникак массив

 params.require(:user).permit(:email, :first_name, :last_name, 
  :city_id, :province_id, :password, :password_confirmation, :cuisines => [])
0 голосов
/ 22 мая 2018

Чтобы объявить, что значение в params должно быть массивом разрешенных скалярных значений, сопоставьте ключ с пустым массивом:

def user_params
  params.require(:user).permit(:email, :first_name, :last_name, 
  :city_id, :province_id, :password, :password_confirmation, :cuisines => [])
end

Здесь вы можете увидеть ответ с более подробной информацией как разрешитьмассив с сильными параметрами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...