Rails活动存储,不允许的参数

时间:2019-03-02 20:38:18

标签: ruby-on-rails devise rails-activestorage

我在前端使用Rails API和Vue。我试图让用户使用Active Storage上传他们的头像。但是,Rails抱怨不允许使用avatar参数。

在前端,我有一个简单的输入

<input id="avatar" type="file" @change="onImageChange" />

哪个触发更改

onImageChange(event) {
  this.avatar = event.target.files[0];
}

然后,提交

submit() {
      const formData = new FormData();
      formData.append("avatar", this.avatar);
      this.axios
        .put("/api/signup", {
          ...
          user: {
            ...
            avatar: formData
          }
        })

我们在RegistrationsController#update中收到了请求。我们将头像包含在白名单中

  def account_update_params
    params.require(:user).permit(:avatar, ...)
  end

模型用户has_one_attached:avatar。

但是,提交后我会得到

  

参数:   {“ headers” => {...},   “用户” => {...,“头像” => {}}}

     

不允许的参数::avatar

我还尝试使用.permit!(:avatar)将其列入白名单,并得到相同的结果。知道可能是什么问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我将头像视为json,而不是临时文件对象。假设json如下: 参数:{“ headers” => {...},“ user” => {...,“ avatar” => {“ name” =>“ test.png”,“ file”:<#Temp File Obj >}}}

然后我们将使用语句

params.require(:user).permit(..., avatar: [:name, :file])