1

これは些細な問題のように思えるかもしれませんが、どこにも答えが見つからないようです (これは、Rails が私がしていることに眉をひそめているためかもしれません)。

Sidekiq を使用してバックグラウンド タスク (画像処理、アップロードなど) を処理していますが、それらが終了したら、現在のページを別のページにリダイレクトするか、部分的にレンダリングすることをお勧めします。

perform メソッドの現在のコードは次のようになります。

def perform(entry_id)
        @entry = Entry.find(entry_id)
        #Create, upload image, all stored in @file when complete

        if @file.save
            #render will go here
        else
            raise @file.inspect
        end
    end

そのため、次のようないくつかの方法を試しました。

render 'entry/new'

また

render :partial => 'entry/partial'

redirect_to @entry, notice: 'File Uploaded'

私もこの恐ろしいハックを試しました:

entry_controller.rb

# Called after the background task is completed
def self.done_loading(entry_id)
  @entry = Entry.find(entry_id)
  @entry.update
end

worker.rb

EntriesController.done_loading(entry_id)

私は何を間違っていますか?

参照 (私が調べたもの): エラー検証を処理するときに render と redirect_to をいつ使用するか

https://gist.github.com/1210155

http://railsforum.com/viewtopic.php?id=16885

4

2 に答える 2

1

彼の答えに反対票を投じる人には、少なくとも彼が反対票を投じている理由を説明してください。

また、バックグラウンド ジョブが完了した後にリダイレクト/レンダリングする場合は、コールバックを使用できますが、これを行うことについて再考する必要があります。ユーザーには画像がアップロードされますが、それをバックグラウンド ジョブに送信しているため、実行される特定の時間枠はありません。ジョブの実行に 2 ~ 5 分かかる場合はどうなりますか? ユーザーは 5 分後にリダイレクトされますか?

これはあなたが探している答えではないかもしれませんが、説明のない反対票よりはましです。

また、画像のアップロードと処理を行っている場合は、調べておく必要があります

jQuery ファイルのアップロード

Railscasts #381 jQuery ファイルのアップロード

Railscasts #383 Amazon S3 へのアップロード

于 2012-12-27T15:41:19.853 に答える