我可以在服务对象中包含帮助方法吗?

bir*_*ird 3 ruby ruby-on-rails

我定义了一个辅助方法: MembersHelper

module MembersHelper
 def current_segment
   Segment.where(current: true).first
 end
end
Run Code Online (Sandbox Code Playgroud)

然后将它包含在类调用Base in app/service/enum_data/base.rbfile中

module EnumData   
  class Base
    include MembersHelper   
  end
end
Run Code Online (Sandbox Code Playgroud)

并在Base的子类中使用它:app/service/enum_data/get_all.rb文件中的GetAll

module EnumData
  class GetAll < Base
    def self.call
      reference_data = current_segment.entities.all
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

但是我收到了一个错误

undefined local variable or method 'current_segment' for EnumData::GetByCategory:Class

我通过将current_segment方法移动到Base类来修复它,但我想知道为什么当我包含该帮助方法时它不起作用?我错过了什么?

And*_*eko 5

您正在使用include,这使得current_segment一个实例方法在包括类,而你所需要的,是一个类的实例方法(单法).为了实现它,你应该使用extend:

module EnumData   
  class Base
    extend MembersHelper   
  end
end
Run Code Online (Sandbox Code Playgroud)