如何实现Carrierwave的"删除上传的文件"?

Nic*_*ick 3 ruby ruby-on-rails carrierwave ruby-on-rails-4

我正在尝试实施Carrierwave 删除上传的文件.虽然上传本身可以正常工作,但删除图像/徽标不起作用.正如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>
Run Code Online (Sandbox Code Playgroud)

我想通过添加此复选框,删除徽标现在已经可以使用了.但是,选中该框然后提交表单不会删除徽标(它也不会生成错误消息).服务器说:

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
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做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
Run Code Online (Sandbox Code Playgroud)

Nic*_*ick 15

你只需要添加:remove_logoupdate_params.

然后你可以摆脱以下:

if params[:remove_logo]
  @user.remove_logo!
  @user.save
end
Run Code Online (Sandbox Code Playgroud)