Rails3.2アプリでPaperclipgemを使用しています。このアプリでは、ユーザーが画像やその他の情報を含む特殊なファイルタイプをアップロードできます(これを「.elf」ファイルと呼びます)。
ElfObjectというクラスを介してelfファイルから画像を抽出するために必要なすべてのコードを記述しました。これは、アプリのコンソールでテストするとうまく機能します。私がやりたいのは、PaperclipがAWS S3に保存する前に、.elfファイルから画像とその他のデータを抽出し、他のデータをモデルに保存してから、画像オブジェクトだけをS3のPaperclip添付ファイルとして保存することです。モデル内の関連するコードは次のとおりです。
class Photo < ActiveRecord::Base
validates_attachment :attachment,
:presence => true
has_attached_file :attachment,
:storage => :s3,
[[S3 credentials removed]]
before_attachment_post_process :import_photo
attr_accessible :name, :attachment, :properties
def import_photo
if attachment_file_name =~ %r{^*\.elf$}
origfile = attachment.queued_for_write
elf = ElfObject.read(origfile)
properties = elf.get_properties
attachment = elf.image.write "image_for_#{attachment_file_name}.png"
save!
end
end
この方法でアプリにアップロードしようとすると、行elf = ElfObject.read(origfile)からエラーArgumentError(無効な引数'ファイル'。予期された文字列、取得したハッシュ。)が発生します。elf = ElfObject.read(origfile.path)のようなものを試してみると、NoMethodError(#の未定義のメソッド `path')が発生します。
明らかに、投稿される前にPaperclipからファイルにアクセスする方法を完全に理解していません。どこが間違っているのか、どのように修正するのかについてのアイデアはありますか?