好久不见——Apparently 5 年了,但据我回忆……
例如,作业代码:
# school-points\jobs\deferred_topic_creation.rb
module Jobs
class DeferredTopicCreation < Jobs::Base
def execute(args)
creator_user_id = args[:creator_user_id]
custom_fields = {
event_start: args[:event_start],
event_end: args[:event_end]
}
creator_user = User.find(creator_user_id) || User.find(Discourse::SYSTEM_USER_ID)
post_creator = PostCreator.new(
creator_user,
args.except!(:creator_user_id, :event_start, :event_end)
)
post = post_creator.create
topic = Topic.find(post.topic_id)
topic.custom_fields = custom_fields
topic.save!
end
end
end
应该在 after_initialize 块中加载。如果不是这样,则无法创建作业。这不会创建主题,而是仅将代码注册为稍后可以入队的作业。
然后,当您实际上想推迟创建主题时(对您而言,是在您的 AJAX 请求之后),您可以执行类似以下操作:
opts = {
title: title,
raw: content,
category: child_category[:id],
creator_user_id: creator_user_id,
event_start: event_start.to_time.to_i,
event_end: event_end.to_time.to_i
}
Jobs.enqueue(:deferred_topic_creation, opts)
希望这能让事情更清楚。