2017-01-02 34 views
0

比方說,我們有兩種型號:ActiveRecord回調或MySql觸發器?

class Message < ActiveRecord::Base 
    belongs_to :user 
    has_many :statistics 
end 

class Statistic < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :messages 
end 

Message:state屬性,它基於Statistic數進行更新(胃內delivered_at,read_at)。一旦消息傳遞給組中的每個用戶,意味着狀態必須相應更新。
Statistics使用不調用回調(update_all)的查詢在sidekiq作業中更新時間戳,因此無法掛入統計信息的'after_update'回調並更新Message.state
我試過在統計表上更新觸發器後使用MySql來做到這一點,但沒有運氣,因爲調用觸發器的查詢在連接中有目標表(消息)。
請指教。
希望我很清楚。
謝謝。

回答

0

起初,MySQL觸發器不工作似乎不好。這是最不可預期的行爲,因爲觸發器是MySQL數據庫本地的東西,當你更新你的表時,它們應該工作,儘管可以通過Rails,查詢或任何其他實體來更新。你應該看看你的觸發器的代碼並進行調試,找出爲什麼它不起作用。

或者,sidekiq作業有after_perform,當作業完成其工作時調用該作業。你可以在那裏寫你的代碼。但這仍不能保證你的工作成功或失敗。所以你需要照顧它。

+0

謝謝!我認爲sidekiq回調只在專業版中。 – Anton

0

我發現在調用觸發器的查詢中的JOIN是不必要的。刪除JOIN和觸發器按預期工作。