初期化子で Paperclip.interpoles を使用して、paperclip gem を介してアップロードされたファイルのカスタム ファイル名を作成しようとしています。私が抱えている問題は、ファイルのアップロード時にファイル システムのカスタム ファイル名を更新することですが、データベース ファイル名はソース ファイルの名前のままです。これを処理するためにデータベース属性を再割り当てするよりも良い方法はありますか?
1 に答える
3
before_create
ActiveRecordでコールバックを使用してみてください。が呼び出されるまで、ペーパークリップは添付されたリソースをディスクに書き込まないため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
メソッドはどこでも宣言できますが、コールバックメソッドを保護またはプライベートとして宣言することをお勧めします。
これにより、添付ファイルがカスタムのランダム化されたファイル名で保存されます。
お役に立てれば。
于 2012-07-01T09:24:19.243 に答える