2017-08-02 109 views
0

我正在嘗試更新作業內迭代的表格行。下面是代碼示例如何在sidekiq事務完成之前提交數據庫?

class UpdateTableJob < ApplicationJob 

    def perform(arg1, arg2) 
    User.each do |person| 
     person.update_attributes(:name => "test") 
     sleep 25 
    end 
    end 

end 

說我有100個用戶和100用戶的迭代完成後才能,我看得出來,改變被提交到數據庫。但是我怎樣才能在每次更新中實現這一點?

+0

1.您確定'perform'正在處理事務嗎? –

+0

2.在您的示例中不使用交易是錯誤的方法 –

+0

在第二條評論中,您是否說交易是強制性的。正如我在更新用戶之後嘗試從數據庫獲取值時所說的那樣,我無法找到更新,但只有在作業完成後纔會更新。但是,當我嘗試在更新後強行提交數據庫時,我能夠看到數據庫中的更改。 – logesh

回答

0

顯式創建事務,以便控制邊界。

class UpdateTableJob < ApplicationJob 

    def perform(arg1, arg2) 
    User.each do |person| 
     User.transaction do 
     person.update_attributes(:name => "test") 
     sleep 25 
     end 
    end 
    end 
end 
相關問題