在ActiveJob :: Base中干

Max*_*kas 3 ruby-on-rails ruby-on-rails-4 rails-activejob

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

  def sanitized_sql_statement(query)
    ActiveRecord::Base.send(
        :sanitize_sql_array,
        query
    )
  end
Run Code Online (Sandbox Code Playgroud)

我有2个不同的工作文件.我应该在哪里放置这种方法以及如何在乔布斯中使用它?

Jae*_*hin 8

使用concern.
在jobs目录下创建jobs目录,app/jobs/concerns如模型和控制器.

写关注文件.

module SqlSanitizer
  extend ActiveSupport::Concern

  def sanitized_sql_statement(query)
    ActiveRecord::Base.send(
      :sanitize_sql_array,
      query
    )
  end
end
Run Code Online (Sandbox Code Playgroud)

并包括在你的工作中

class YourJob < ActiveJob::Base
  include SqlSanitizer

  # ... do something
end
Run Code Online (Sandbox Code Playgroud)

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

  • @MaxPaprikas 如何像这样包含`include :: SqlSanitizer`。如果未加载关注文件,请在配置文件中添加路径`config.autoload_paths &lt;&lt; "#{Rails.root}/app/jobs/concerns"` (2认同)