Проблема отправки FormData в Rails API с сильными параметрами - PullRequest
0 голосов
/ 10 июля 2019

Я хочу создать персонажа с именем и аватаром.Вот мой код:

CharacterApi.js, в котором я делаю мой сетевой вызов

function addCharacter(name, avatar) {
  const data = new FormData();
  data.append(‘name’, name);
  data.append(‘avatar’, avatar);

  return authenticatedFetch({
    path: '/teams/characters’,
    method: 'post',
    data
  });
}

characters_controller.rb

def create
  @character = @character.new(character_params)

  if @character.save
    render :show
  else
    render json: @character.errors, status: :unprocessable_entity
  end
end

[. . .]

private

def character_params
  params.fetch(:character, {}).permit(:name, :avatar)
end

Что, когда я делаю запрос на создание, выдает ошибку 422: unprocessable entity.Тем не менее, отладки показали, что на самом деле отправляются правильные параметры, и выполнение следующих действий заставляет все снова работать нормально:

def create
  @character = @characters.new
  @character.name = params[:name]
  @character.avatar = params[:avatar]

[. . .]
end

Хотя этот второй метод работает, он не очень практичен для меня, так как яЯ хотел бы добавить еще несколько параметров в будущем.

Если я отправляю параметры как простой JSON, я не могу получить какой-либо файл (всегда дает мне нулевое значение), но первый метод работает, этовремя:

При этом я не могу отправлять изображения или любые файлы, но первоначальный синтаксис rails работает снова

function addCharacter(name, avatar) {
  return authenticatedFetch({
    path: '/teams/characters’,
    method: 'post',
    data: {name, avatar}
  });
}

Есть ли причина, по которой короткий синтаксис@character.new(character_params) не работает при отправке FormData?

Я использую несущую волну для обработки файлов в API рельсов.Заранее спасибо за любую помощь!

1 Ответ

1 голос
/ 10 июля 2019

Вы используете Сильные Параметры неправильно.

Должно быть:

def character_params
  params.require(:character).permit(:name, :avatar)
end
...