Carrierwave上传器:如何添加链接以删除上传的文件

时间:2015-05-29 22:31:31

标签: ruby-on-rails ruby ruby-on-rails-4 carrierwave

我有一个上传器,用于三种不同类型用户的个人资料,以上传他们的头像或徽标。我在这里使用了载波和雾,还有一个生产中的S3桶。这有效。现在我想要包含一个链接,以删除该用户想要的头像/徽标。所以它不应该删除用户的整个记录​​,只删除一个变量(头像/徽标)。我使用下面的代码。

不幸的是,它不起作用。 我在这里做错了什么?错误:Couldn't find User without an ID指的是控制器行User.friendly.find(params[:id]).avatar.destroy。 (friendly来自friendly_id gem。)

用户控制器:

  def destroy_avatar
    User.friendly.find(params[:id]).avatar.destroy
    flash[:success] = "Avatar deleted"
    redirect_to users_url
  end

路线:

  delete 'avatar'           =>  'users#destroy_avatar'

视野中的链接:

  <% if @users.avatar? %>
    <%= link_to "Remove avatar", avatar_path(@user), method: :delete %>
  <% end %>

尽管错误消息@user确实有值,因为它在整个视图页面中用于其他正常运行的变量。

服务器日志说明了请求:

Started DELETE "/avatar.fakename1"
Processing by UsersController#destroy_avatar as 
  Parameters: {"authenticity_token"=>"ZYVI***AZy34jYzQ=="}
Completed 404 Not Found in 2ms (ActiveRecord: 0.0ms)

ActiveRecord::RecordNotFound (Couldn't find User without an ID):
  app/controllers/users_controller.rb:68:in `destroy_avatar'

它有以下请求参数:

{"_method"=>"delete",
 "authenticity_token"=>"ZYVIEy1***DYGICxgi4jYzQ==",
 "format"=>"fakename1"}

1 个答案:

答案 0 :(得分:2)

当您使用带有参数的rails path helper时,路由需要反映出来。

基本上你需要在你的路线中做delete 'avatar/:id' => 'users#destroy_avatar', as: avatar,这样你就可以将一个参数传递给路径助手。