使用强参数将 FormData 发送到 Rails API
Issue sending FormData to Rails API with strong parameters
我想创建一个角色,有名字和头像。这是我的代码:
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}
});
}
当我发送 FormData 时,短语法 @character.new(character_params)
不起作用是否有原因?
我使用载波处理 rails API 中的文件。在此先感谢您的帮助!
您使用强参数的方式有误。
必须是:
def character_params
params.require(:character).permit(:name, :avatar)
end
我想创建一个角色,有名字和头像。这是我的代码:
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}
});
}
当我发送 FormData 时,短语法 @character.new(character_params)
不起作用是否有原因?
我使用载波处理 rails API 中的文件。在此先感谢您的帮助!
您使用强参数的方式有误。
必须是:
def character_params
params.require(:character).permit(:name, :avatar)
end