0

這似乎是一個微不足道的問題,但我似乎無法在任何地方找到答案(這可能是因爲Rails不喜歡我所做的)。Rails在控制器外部調用redirect_to(或渲染)

我使用Sidekiq來處理後臺任務(如圖像處理,上傳等),一個他們完成我想重定向當前頁面到另一個,甚至更好地渲染出一個部分。

我在執行方法當前的代碼看起來是這樣的:

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' 

and

redirect_to @entry, notice: 'File Uploaded' 

我甚至試過這種可怕的黑客:

entries_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) 

我在做什麼錯?

引用(東西我擡頭): When to use render vs redirect_to when handling error validations

https://gist.github.com/1210155

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

回答

0

對於那些反對投票他的回答至少給一個解釋他爲什麼反對投票。另外,如果你想在後臺作業完成後重定向/渲染,你可以使用回調,但你應該重新考慮這樣做。對於用戶來說,他們會上傳一張圖片,但是由於您將它發送到後臺作業,因此您沒有具體的執行時間。如果這項工作需要2-5分鐘才能執行,該怎麼辦?用戶將在5分鐘後重定向?

我知道這可能不是你正在尋找的答案,但它比沒有解釋的投票更好。

另外,如果你是做圖像的上傳和處理,你應該看看到

jQuery File Uploads

Railscasts #381 jQuery File Upload

Railscasts #383 Uploading to Amazon S3

+0

之所以我做後臺作業,是因爲它將在Heroku上進行託管(這很明確地告訴你將上傳作爲後臺進程運行)。我並不完全喜歡目前所有的佈局,但現在用戶可以擁有一臺漂亮的小型裝載機。gif讓他們被佔領,並知道它正在處理。我想渲染出一個部分,以便它將更新與後臺任務(完成處理...現在加載...等)我已經看過這兩個railscasts,並使用jQuery文件上傳之前,他們是好的,但我正在嘗試使用sidekiq。 – user1470511

+0

這有點不同,我只是試圖與回形針一起工作。總的來說,有點不同,最後因爲它有點違反「鐵軌規則」,它可能無法工作。在我去之前我想在這裏嘗試,然後重新考慮所有事情。 – user1470511