ruby-on-rails - 使用 ActiveSupport::Concern 的 Rails mixin 不起作用

标签 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

最佳答案

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

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

关于ruby-on-rails - 使用 ActiveSupport::Concern 的 Rails mixin 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20371828/

相关文章:

ruby-on-rails - 如何缩小 Rails 中的 JSON 输出?

ruby-on-rails - 如何将记录添加到has_many :through association in rails

ruby - 如何将 attr_writer 用于模块方法?

ruby-on-rails - 将字符串 "@patient"更改为变量

html - 仅当数据库中存在图像时如何设置div的动态背景图像

ruby - 从网站保存图像(使用 watir)

ruby - 解析与操作的可变范围和顺序 : Assignment in an "if"

ruby-on-rails - Rails 4 — 如何从 JSON API 填充用户模型?

html - 使用 bootstrap 3,navbar-right 在 form_tag 中不工作

mysql - 使用foreign gem 指定自定义外键列名称