在 ActiveJob::Base 中干燥

DRY in ActiveJob::Base

我需要在 Jobs 中使用清理,所以我写了方法

  def sanitized_sql_statement(query)
    ActiveRecord::Base.send(
        :sanitize_sql_array,
        query
    )
  end

我有 2 个不同的作业文件。我应该把这个方法放在哪里以及如何从乔布斯那里使用它?

使用concern.
在作业目录 app/jobs/concerns 下创建关注目录,就像模型和控制器一样。

写入关注文件。

module SqlSanitizer
  extend ActiveSupport::Concern

  def sanitized_sql_statement(query)
    ActiveRecord::Base.send(
      :sanitize_sql_array,
      query
    )
  end
end

并包括在你的工作中

class YourJob < ActiveJob::Base
  include SqlSanitizer

  # ... do something
end

如果无法自动加载 SqlSanitizer,请在 config/application.rb 文件中添加自动加载路径 => config.autoload_paths << "#{Rails.root}/app/jobs/concerns"