我在前端使用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)将其列入白名单,并得到相同的结果。知道可能是什么问题吗?谢谢!
答案 0 :(得分:0)
我将头像视为json,而不是临时文件对象。假设json如下: 参数:{“ headers” => {...},“ user” => {...,“ avatar” => {“ name” =>“ test.png”,“ file”:<#Temp File Obj >}}}
然后我们将使用语句
params.require(:user).permit(..., avatar: [:name, :file])