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またはそれに相当するものだけで、paperclip は古い添付ファイルを自動的に削除します。たとえば、このフォームがあるとします ( 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

いずれの場合も、古い添付ファイルはストレージから削除され、新しいファイルが代わりになります。

于 2013-03-01T01:14:02.367 に答える