Ruby on rails Ruby/Rails worker创建或更新记录(如果存在)-避免干燥
我有一个工人来存储来自传入Webhook的数据。现在,如果现有数据已经存在,我想使用这个worker来更新现有数据Ruby on rails Ruby/Rails worker创建或更新记录(如果存在)-避免干燥,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个工人来存储来自传入Webhook的数据。现在,如果现有数据已经存在,我想使用这个worker来更新现有数据 class StoreActivityWorker include Sidekiq::Worker def perform(webhook) Activity.create!( cms_activity_id: webhook.dig('entity', 'id').to_i, is_separate_activity: webhook.d
class StoreActivityWorker
include Sidekiq::Worker
def perform(webhook)
Activity.create!(
cms_activity_id: webhook.dig('entity', 'id').to_i,
is_separate_activity: webhook.dig('entity', 'attributes', 'is_separate_activity'),
content_full: retrieve_full_content(webhook),
content_basic: retrieve_basic_content(webhook),
)
end
end
由于webhook不显示哪些记录已更新,UpdateActivityWorker
将保持相同(更新所有字段):
正如你所看到的,它不是干的。有没有办法避免重复该代码?看一下方法:
class UpdateActivityWorker
include Sidekiq::Worker
def perform(webhook)
Activity.where(cms_activity_id: webhook[:entity][:id]).update(
cms_activity_id: webhook.dig('entity', 'id').to_i,
is_separate_activity: webhook.dig('entity', 'attributes', 'is_separate_activity'),
content_full: retrieve_full_content(webhook),
content_basic: retrieve_basic_content(webhook),
)
end
end
class StoreActivityWorker
include Sidekiq::Worker
def perform(webhook)
entity = webhook.dig 'entity'
activity = Activity.find_or_initialize_by(cms_activity_id: entity['id'])
activity.update!(
is_separate_activity: entity.dig('attributes', 'is_separate_activity'),
content_full: retrieve_full_content(webhook),
content_basic: retrieve_basic_content(webhook),
)
end
end