如何按名称空间组织辅助作业

zap*_*tos 5 ruby-on-rails

我有很多密切相关的ActiveJob辅助作业,并且由于每个作业都需要与一起运行perform,因此我想将它们放到一个文件夹名称空间中。

例如,假设我有:

app/jobs/hello_job.rb
app/jobs/goodbye_job.rb
app/jobs/thank_you_job.rb
Run Code Online (Sandbox Code Playgroud)

而且我称这些为HelloJob.perform_later

我想拥有的是这样的:

app/jobs/greetings/hello_job.rb
app/jobs/greetings/goodbye_job.rb
app/jobs/greetings/thank_you_job.rb
Run Code Online (Sandbox Code Playgroud)

并以类似Greetings::HelloJob.perform_later..的名称致电给他们,尽管这不起作用。

小智 3

ruby​​ 中,您可以使用模块作为命名空间

因此,您将密切相关的 ActiveJobs 放在一个文件夹中,并在与该文件夹同名的模块中定义每个类。

因为app/jobs/greetings/hello_job.rb这对我有用:

module Greetings
  class HelloJob < ActiveJob::Base
    queue_as :default

    def perform
      puts 'Hello!'
    end
  end
end
Run Code Online (Sandbox Code Playgroud)