【问题标题】:DRY in ActiveJob::BaseActiveJob::Base 中的 DRY
【发布时间】:2016-05-20 06:13:24
【问题描述】:

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

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

我有 2 个不同的工作文件。我应该把这个方法放在哪里以及如何在 Jobs 中使用它?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 rails-activejob


    【解决方案1】:

    使用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 &lt;&lt; "#{Rails.root}/app/jobs/concerns"

    【讨论】:

    • 我遇到了一个错误NameError (uninitialized constant NotifierJob::SqlSanitizer): 它不适用于 ActiveJob
    • @MaxPaprikas 像这样包含include ::SqlSanitizer 怎么样。如果未加载关注文件,请在配置文件中添加路径config.autoload_paths &lt;&lt; "#{Rails.root}/app/jobs/concerns"
    • 效果很好!请添加有关自动加载的信息以回答(自动加载成功了)
    猜你喜欢
    • 2015-03-29
    • 2017-10-14
    • 2017-01-11
    • 2016-08-25
    • 2014-12-22
    • 2018-03-29
    • 2015-11-09
    • 2015-08-10
    • 2019-01-08
    相关资源
    最近更新 更多