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

时间:2017-04-12 10:10:03

标签: ruby-on-rails ruby

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

module MembersHelper
 def current_segment
   Segment.where(current: true).first
 end
end

然后将其包含在app/service/enum_data/base.rb文件

中的类调用Base中
module EnumData   
  class Base
    include MembersHelper   
  end
end

并使用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

但我收到了错误

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

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

1 个答案:

答案 0 :(得分:5)

您正在使用include,这使得包含类中的current_segment成为实例方法,而您需要的是类实例方法 (单身方法)。为了实现它,您应该使用extend

module EnumData   
  class Base
    extend MembersHelper   
  end
end