2016-05-24 4 views
1

にアップロードする前にファイルの名前を変更します。ユーザーは、アップロードしようとしているファイルに関連するフォームの2つのフィールドを入力します。私はその情報を使って新しいファイル名を構築する必要があります。私はAWS S3、ユーザが選択したアップロードファイルへの保存私のRailsアプリケーションを持っているS3

これはモデルです:

class DocAttachment < ActiveRecord::Base 
    belongs_to :doc_attachment_type 
    belongs_to :language 

    has_attached_file :attachment 

    before_save :rename_file 

    #Attempted Paperclips callbacks but couldn't get values for the form 
    #after_attachment_post_process :rename_file 

    validates_attachment_presence :attachment 

    validates_attachment_content_type :attachment, 
           content_type: %w(application/pdf application/vnd.ms-excel application/vnd.openxmlformats-officedocument.spreadsheetml.sheet application/msword application/vnd.openxmlformats-officedocument.wordprocessingml.document text/plain), 
           size: { :in => 0..10.megabytes } 

    validates :doc_attachment_type_id, presence: true 
    validates :code, presence: true 
    validates :title, presence: true 
    validates :language_id, presence: true 

    def rename_file 
    extension = File.extname(attachment_file_name).gsub(/^\.+/, '') 
    filename = attachment_file_name.gsub(/\.#{extension}$/, '') 
    new_attachment_file_name = "#{self.code}-#{self.language.name}.#{extension}" 

    attachment.instance_write(:attachment_file_name, new_attachment_file_name) 

    end 
end 

Gemfile:

gem 'aws-sdk', '< 2.0' 
gem 'paperclip' 

私は、コールバックの後/前にペーパークリップを使用しようとしましたが、彼らは提出フォームフィールドのデータを私に提供するようには見えませんでした。私はs3_direct_upload宝石のアイデアが好きしかし、積極的な開発

大歓迎任意のヘルプにあるように見えるdoesntのため、それが動作するかどうかはわかりません。

長期的には、私は、ユーザーがプログレスバーのいくつかの種類にAJAXを使用して複数のアップロードを行うことを許可したいと思います。

答えて

1

問題がrename_fileこのメソッドの最後の行とありました。

def rename_file 
    extension = File.extname(attachment_file_name).gsub(/^\.+/, '') 
    filename = attachment_file_name.gsub(/\.#{extension}$/, '') 
    new_attachment_file_name = "#{self.code}-#{self.language.name}.#{extension}" 

    attachment.instance_write(:file_name, new_attachment_file_name) 
end 
関連する問題