9

ファイルのアップロードを受け入れる必要があるプロジェクトに取り組んでいます。ファイルがアップロードされた後、ファイルから情報を抽出する処理を行っています。最終的にはこれをバックグラウンド ワーカーで実行する予定ですが、現在はインラインで実行されています。

ファイルを処理するために after_create と after_save の両方を使用しようとしましたが、Paperclip からの保存メソッドの前に私のメソッドが実行されているようです。

save メソッドを早期にトリガーする方法、またはファイルがファイル システムに保存された後に何らかの方法でメソッドを実行する方法はありますか?

4

4 に答える 4

7

ファイルシステムにまだ保存されていない (またはバット) ため、コールバックでペーパークリップ ファイルを読み取ることはできません。よくわかりません。

編集:after_save理由は、ペーパークリップがコールバックを介してファイルを書き出すためです。そのコールバックは後に発生しますafter_create

ただし、処理のファイル ペイロードを取得できます。例えば:

class Foo < ActiveRecord::Base

  has_attached_file :csv

  after_create :process_csv

  def process_csv
    CSV.parse(self.csv.queued_for_write[:original].read)
    # .. do stuff
  end

end

2分前にこれをしなければなりませんでした。お役に立てれば。

于 2015-01-29T21:34:00.310 に答える
1

問題はコールバックの順序に関連している可能性があると思います。

他の回答で説明したように、添付ファイルは実際に、呼び出し時にモデル クラスに追加 after_save される Paperclip で定義されたコールバックhas_attached_fileで物理的にディスクに保存されます。

after_saveそのため、 (アップロードされたファイルを処理する) 独自のコールバックが . の後に定義されていることを確認する必要がありますhas_attached_line

注:after_createコールバックは実際にはまったく使用できません。以前に呼び出されたからafter_saveです。

于 2016-03-09T10:41:49.923 に答える
0

Paperclip の後処理イベントのコールバックを見てみましょう。after_post_process追加のファイル情報の抽出を行うために呼び出すことができるはずです。

于 2013-11-13T18:40:38.287 に答える