使用ActiveSupport :: Concern的Rails mixins不起作用

时间:2013-12-04 09:42:28

标签: ruby-on-rails ruby ruby-on-rails-4 mixins activesupport

我在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:undefined method`logger'for - Service :: MyService:0x007fdffa0f23a0

Service::MyService.new.logger

我做错了什么?我正在使用Rails 4.0.2

1 个答案:

答案 0 :(得分:2)

您将记录器方法定义为类方法,而不是常规方法。这应该有效:

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