我有发票模型。创建发票时,需要附件。这很有效。
如何在更新期间更换附件?我希望删除原始附件。当我在编辑屏幕上有相同的表单字段时,它在提交时不会更新。旧文件仍在那里。此外,它显示“没有选择文件”,即使有一个。我可以点击查看附件,它显示就好了。
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 :(得分: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
在任何一种情况下,旧附件都将从存储中删除,新文件将取代它。