Rails 3 - 如何替换Paperclip中现有的附件

4

我有一个发票模型。在创建发票时需要附件,这个没问题。

那么在更新时如何替换附件呢?我想要删除原始附件。当我在编辑页面上有相同的表单字段时,它提交后并没有更新。旧文件还在那里,而且显示“未选择文件”,尽管已经选择了一个文件。我可以点击“查看附件”,它显示得很好。

invoice.rb

has_attached_file :attachment,
  :url => "http://...../attachments/:id/:style/:basename.:extension",
  :path => ":rails_root/public/attachments/:id/:style/:basename.:extension"
  validates_attachment_presence :attachment
  validates_attachment_size :attachment, :less_than => 5.megabytes

_form.html.erb

<label>Invoice Attachment: </label>
<%= f.file_field :attachment %>

<%= link_to 'View Attachment', @invoice.attachment.url %>
1个回答

1
你只需要调用update_attributes或一个等价的方法,Paperclip 就会自动删除旧的附件。例如,假设你有这个表单(来自paperclip文档):
<%= form_for @user, :url => users_path, :html => { :multipart => true } do |form| %>
  <%= form.file_field :avatar %>
  ...
<% end %>

在你的控制器中,你可以有类似以下的代码:
def update
  @user = User.find(params[:id])
  @user = User.update_attr(params)
end

或者,如果你只想更新附件,可以这样做:

def update
  @user = User.find(params[:id])
  avatar_data = params.slice('avatar')
  @user = User.update_attr(avatar_data)
end

无论哪种情况,旧的附件将会从存储中删除,新的文件将会取代它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接