5

Rails 3.2.6 で Carrierwave-mongoid でアップロード/管理されているファイルを更新/名前変更する方法がわかりません。ファイルシステムだけでなく、データベース内のファイルの名前を変更したい。

このようなものかもしれません...

def rename( id , new_name )
  f = UploadedFile.find(id)

  if f.update_attributes({ f.file.original_filename: new_name })  # this is WRONG, what is right???
    new_path = File.join( File.dirname( f.file.current_path ) , new_name ))
    FileUtils.mv( f.file.current_path , new_path )
  end

  return f
end

これはすでにアップロードされた後であることを付け加えさせてください。

4

6 に答える 6

5

もっとエレガントな方法があると確信していますが、次の作業を行うことができました。以下についてコメントをいただければ幸いです

*これを app/uploaders/file_uploader.rb に追加します

def rename(new_name)
  sf = model.file.file
  new_path = File.join( File.dirname( sf.file ) , "#{new_name}#{File.extname( sf.file )}")
  new_sf = CarrierWave::SanitizedFile.new sf.move_to(new_path)
  model.file.cache!(new_sf)
  model.save!
  return model
end

ありがとう!

于 2012-10-19T20:13:26.047 に答える
0

アップローダーファイルのバージョン設定(ファイル名と画像サイズ)を変更した後、アップロードされた画像を再処理するためにこのrakeタスクを使用しました。

# Usage: rake carrierwave:reprocess class=Model
namespace :carrierwave do
  task :reprocess => :environment do

    CLASS = ENV['class'].capitalize
    MODEL = Kernel.const_get(CLASS)
    records = MODEL.all

    records.each do |record|
      record.photo.recreate_versions! if record.photo?
    end

  end
end

ノート:

  • 「写真」をアップローダーに名前を付けたものに置き換えます。
  • レーキタスクはlib/tasksフォルダーに移動します。
  • これはActiveRecordを使用していますが、Mongoidに別のものが必要かどうかはわかりません。
于 2012-10-19T01:41:37.873 に答える