2012-01-09 2 views
0

私は初期化子でPaperclip.interpolesを使用してクリップの宝石を経由してアップロードされたファイルのカスタムファイル名を作成しようとしています。私が抱えている問題は、ファイルがアップロードされたときにファイルシステム上のカスタムファイル名を更新することですが、データベースファイル名はソースファイルの名前のままです。これを処理するためにデータベース属性を再割り当てする必要はありませんか?ペーパークリップの宝石とカスタムファイル名2.3

答えて

3

はActiveRecordの中before_createコールバックを使用してみてください。 paperclipは、ActiveRecord::Base#saveが呼び出されるまで、添付されたリソースをディスクに書き込まないため、これはあなたのカスタムファイル名を作成するのに適しているようです。

これを行うには、カスタムファイル名を作成する通常の方法を登録します。これにより、添付されたイメージの名前が変更され、ファイルシステムとデータベースで検索されます。

のはあなたがカスタムランダムなファイル名で画像を添付したいモデルを、持っているとしましょう。お使いのモデルで

:あなたのモデルでも

has_attached_file :image 
before_create :randomize_image_file_name 

def randomize_image_file_name 
    extension = File.extname(image_file_name).downcase 
    self.image.instance_write(:file_name, "#{ActiveSupport::SecureRandom.hex(8)}#{extension}") 
end 

保護またはプライベートとしてコールバックメソッドを宣言することはいい習慣だけれどもあなたは、どこでもあなたが望むあなたのメソッドを宣言することができます。

これは、カスタムランダムファイル名で添付ファイルを保存します。

これが役に立ちます。

関連する問題