Rails 3 - 如何替换回形针中的现有附件

时间:2012-11-19 17:17:21

标签: ruby-on-rails-3 paperclip

我有发票模型。创建发票时,需要附件。这很有效。

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

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 个答案:

答案 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

在任何一种情况下,旧附件都将从存储中删除,新文件将取代它。