由於您打電話給render
,所以您會收到錯誤,然後您打電話給super
,其中也有一個呈現或重定向。您不能在方法中多次調用渲染或重定向(除非將其封裝到條件if語句中)。
此外,您不需要空圓括號來調用像JavaScript一樣的方法。
現在。任何大型或緩慢運行的任務都適用於後臺。即使你是新手,如果你使用的是rails 4.2,那麼今天的後臺工作非常簡單!
我會使用delayed_job,它的方便和靈活。因此,這些步驟如下:
1.添加的delayed_job和守護程序到您的Gemfile &運行捆綁安裝
gem 'delayed_job_active_record'
gem 'daemons'
2.確保設置您的模板的方法是在用戶模式
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
def set_default_templates
### this is where all your setup code will go, remember that you're inside the object itself, so if you need to reference data stored already you'll use self, e.g. self.name or self.confirmed_at
end
handle_asynchronously :set_default_templates
end
注確保使用方法名稱添加handle_asyncronously行,這告訴模型應始終使用ActiveJob調用此方法(這是允許您使用任何後臺服務的包裝器,但代碼在模式中不會更改)
3.現在是時候調用該方法,2種選擇:從控制器調用該方法,或者調用該方法在after_create
回調
我建議在after_create
這樣做,它只是一點清潔劑。因此,在模型中,使用相同的代碼如上,但色器件聲明下添加這一行:
after_create :set_default_tempaltes
如果你寧願做它的控制器,你可以但色器件記住一定要做在註冊控制器內部,所以當新用戶註冊,它的創建方法發生了:
def create
super
if resource.save
resource.set_default_templates
end
end
注要知道,直到你完全明白這些設計方法這樣做,我不建議重寫他們,認爲你是更安全的使用after_create回調
4.現在產生的延遲工作
rails generate delayed_job:active_record
5.啓動從後臺進程命令行
bin/delayed_job start
此外,如果你使用的是麒麟和領班爲您的應用服務器有你需要採取其他步驟,BU t那些在教程和這裏在StackOverflow概述,所以只是搜索或創建一個新的問題,如果你被卡住
我通過你很清楚的教程走了,我也看了看文檔,但我很困惑。我認爲'handle_asynchronously'的重點是我不必退出rails服務器,然後運行'rake jobs:work',然後退出並再次運行rails s?我不明白delayed_job是如何工作的。你能否指點我關於delayed_jobs的教程或者解釋這個使用delayed_job的過程?謝謝一堆 – v8soup