【问题标题】:Issue sending FormData to Rails API with strong parameters使用强参数将 FormData 发送到 Rails API 的问题
【发布时间】:2019-07-10 10:44:38
【问题描述】:

我想创建一个有名字和头像的角色。这是我的代码:

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 中的文件。提前感谢您的帮助!

【问题讨论】:

    标签: reactjs carrierwave form-data strong-parameters rails-api


    【解决方案1】:

    您以错误的方式使用强参数。

    一定是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-10
      • 1970-01-01
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多