如何將下面的ActiveRecord :: Observer轉換爲Service對象(或者可能是多個對象)?如何將此ActiveRecord :: Observer轉換爲Service對象?
的PushService
通過的所有變化的WebSocket更新所有連接的瀏覽器。它通過發佈到外部進程來完成此操作。觀察員從Thread.new
轉移到Sidekiq後,突然出現。一個Sidekiq作業開始於:after_create可以在事務實際提交之前運行,因此會引發ActiveRecord :: NotFound錯誤。
建議使用:after_commit掛鉤,但PushService
所需的信息(如record.changes
)將不可用。
,這個觀測滿足有趣的用例是創建一個新的消息時,這是另一個消息的回覆。它會自動運行兩個回調。 An:應答消息的after_create和線程消息的after_touch。
我很有興趣看看這個行爲可以通過一個明確的服務對象運行。
class PushObserver < ActiveRecord::Observer
observe :message
def after_create(record)
Rails.logger.info "[Observe] create #{record.inspect}"
PushService.new(:create, record).publish
end
def after_update(record)
Rails.logger.info "[Observe] update #{record.changed.inspect}"
PushService.new(:update, record).publish
end
def after_touch(record)
Rails.logger.info "[Observe] touched #{record.changes.inspect}"
PushService.new(:touch, record).publish
end
def after_destroy(record)
Rails.logger.info "[Observe] destroy #{record.inspect}"
PushService.new(:destroy, record).publish
end
end
您好!你有沒有找到解決你的問題?我們遇到了同樣的問題,無法弄清楚要做什麼 – ka8725