Я хочу создать персонажа с именем и аватаром. Вот мой код:
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 рельсов. Заранее благодарю за любую помощь!