4

我有一个发票模型。创建发票时,需要附件。这行得通。

如何在更新期间更换附件?我希望删除原始附件。当我在编辑屏幕上有相同的表单字段时,它不会在提交时更新。旧文件还在。此外,它显示“没有选择文件”,即使有一个。我可以单击查看附件,它显示得很好。

发票.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 %>
4

1 回答 1

1

您需要做的就是打电话update_attributes或等效,回形针会自动删除旧附件。例如,假设您有这个表格(来自回形针文档):

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

无论哪种情况,旧附件都将从存储中删除,新文件将取而代之。

于 2013-03-01T01:14:02.367 回答