2014-06-18 61 views
0

讀取數據庫中讀取這是模型:使用sidekiq從Rails的

class DataInfo < ActiveRecord::Base 
    STATUS = {:UNAPPROVED => 1, :APPROVED => 2, :PROCESSED => 3 } 
    attr_accessible :id, :owner 
    validates :status, :inclusion => {:in => STATUS.values}  
end 

我想寫一個worker將與Status列值:APPROVED讀取所有的行。它將在這些行上發出PUT請求,並且在收到成功後,我想更新狀態:PROCESSED。我不理解如何使用sidekiq進行活動記錄。

回答

1

當Sidekiq啓動時,您的數據庫連接也被初始化。因此,您可以像使用Rails應用程序一樣在Active Record中查詢數據庫。

根據您所概述的內容,您聽起來像是需要編寫一個觀察者來監視特定字段上的更改。當該字段設置爲Approved時,發送作業到Sidekiq進行處理。類似的東西,以我所提供如下:

class StatusObserver < ActiveRecord::Observer 
    def after_save(datainfo) 
    if datainfo.status.eql? "APPROVED" 
     DataInfoWorker.perform_async datainfo.id 
    end 
    end 
end 

class DataInfoWorker 
    include Sidekiq::Worker 

    def perform(datainfo_id) 
    datainfo = DataInfo.find datainfo.id 

    #Do your desired business logic here. 
    end 
end 
+1

FWIW,如果你on Rails的4,觀察家們現在提取到自己的寶石,你必須手動添加到您的Gemfile。如果你不能/想要添加這個rails-observers gem,你可以在你的ActiveRecord模型中使用更多'標準'的Rails回調。 –

+0

良好的電話@ craig.kaminsky。這裏有一個鏈接到github存儲庫,如果你使用的是Rails 4:https://github.com/rails/rails-observers。 ActiveRecord回調也是我建議的一個很好的選擇。 –