Rails 3 Carrierwave如何删除作为模型属性的文件?

leo*_*nel 3 ruby ruby-on-rails formtastic carrierwave activeadmin

我跟随了Railcast#253 http://railscasts.com/episodes/253-carrierwave-file-uploads,效果很好.但后来我用ActiveAdmin实现了它,因此Formtastic(ActiveAdmin使用Formtastic作为表单).

所以我可以上传文件和下载文件.

问题是,当链接删除链接时,似乎Carrierwave期望模型而不是模型的属性.

我有模型Shipment,它有hbl_pdf属性(PDF文档).这是我的删除链接...

row("HBL") { link_to 'remove', shipment.hbl_pdf, :confirm => "Are you sure?", :method => :delete }
Run Code Online (Sandbox Code Playgroud)

我收到错误...... undefined method model_name for PdfUploader:Class

我不想删除货件,只删除文件.

iwa*_*bed 12

你为什么不打电话remove_hbl_pdf!给货件对象呢?阅读以下内容的"删除上传的文件"部分:https://github.com/jnicklas/carrierwave#readme

link_to 'remove', remove_shipment_pdf_path(shipment), :confirm => "Are you sure?", :method => :delete
Run Code Online (Sandbox Code Playgroud)

并在你的控制器

def remove_shipment_pdf
  shipment = Shipment.find_by_id(params[:shipment_id])
  shipment.remove_hbl_pdf! if shipment
  # respond with something or redirect
end
Run Code Online (Sandbox Code Playgroud)

remove命令的语法基于属性的名称.因此,如果您的模型属性名称是,.hbl_pdf那么它是remove_hbl_pdf!,如果它是.image那么它将是remove_image!