使用ActiveSupport::Concern的Rails混合不起作用



我在lib文件夹中定义了以下模块/类

module Service::Log
  extend ActiveSupport::Concern
  module ClassMethods
    def logger
      Rails.logger
    end
  end
end

class Service::MyService
  include Service::Log
end

当我尝试通过对象实例调用logger方法时,我会收到一条错误消息-NoMethodError:Service::MyService:0x07fdffa0f23a0 的未定义方法"logger"

Service::MyService.new.logger

我做错了什么?我使用的是Rails 4.0.2

您将logger方法定义为类方法,而不是普通方法。这应该有效:

module Service::Log
  extend ActiveSupport::Concern
  def logger
    Rails.logger
  end
end
class Service::MyService
  include Service::Log
end
Service::MyService.new.logger

之前定义方法的方式允许您直接在类上使用logger方法,例如:

Service::MyService.logger

最新更新