我正试图实施Carrierwave的Removing uploaded files。虽然上传本身可以正常工作,但删除图像/徽标不起作用。正如Carrierwave建议我在视图中添加一个复选框以删除上传的徽标。所以我在我的视图页面中:
<div class="logo">
<%= f.label :logo %>
<%= f.file_field :logo, accept: 'image/jpeg,image/gif,image/png', style: "width:100%" %>
<p>
<label>
<%= f.check_box :remove_logo %>
Remove logo
</label>
</p>
</div>
我认为通过添加此复选框,删除徽标现在已经可以使用了。但是,选中该框然后提交表单不会删除徽标(它也不会生成错误消息)。服务器说:
Started PATCH "/users/fakename11"
Processing by UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"eR3XCiW***Oge0w==", "user"=>{"fullname"=>"Natasha Pacocha", "email"=>"example@example.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "remove_logo"=>"1", "organization"=>"Bartoletti-Bins", ...etc...}, "commit"=>"Save changes", "id"=>"fakename11"}
Unpermitted parameter: remove_logo
我不确定要对unpermitted parameter
做些什么。我尝试将attr_accessor :remove_logo
添加到控制器以及用户模型中,但这没有任何区别。
宝石也谈到@user.remove_logo!
和@user.save
。所以我尝试在控制器的update方法中添加它们,如下所示。但这没有任何区别。我做错了什么?
def update
@user = User.friendly.find(params[:id])
if @user.update_attributes(update_params)
if params[:remove_logo]
@user.remove_logo!
@user.save
end
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
def update_params
params.require(:user).permit(:email,
:fullname,
:website,
:logo
:password,
:password_confirmation)
end
答案 0 :(得分:15)
您只需将:remove_logo
添加到update_params
即可。
然后你可以摆脱以下几点:
if params[:remove_logo]
@user.remove_logo!
@user.save
end