2012-11-19 73 views
4

我有發票模型。當我創建發票時,需要附件。這工作。導軌3 - 如何在回形針中替換現有附件

如何在更新期間更換附件?我想要刪除原始附件。當我在編輯屏幕上有相同的表單域時,它在提交時不會更新。舊文件仍然存在。此外,它顯示「沒有文件選擇」,即使有一個。我可以點擊查看附件,它顯示得很好。

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 %> 

回答

0

所有你需要做的就是調用update_attributes或等價物,且回形針會自動刪除舊的附件。例如,假設你有這種形式(從paperclip docs):

<%= 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 

在任何一種情況下,舊附件都將從存儲中刪除,並且新文件將佔用它的位置。