首页 > 解决方案 > 代码优化/更好的方式来操作类名

问题描述

我有这个代码很长时间了,我想知道是否有一个简短或更好的方法来做到这一点。我们有匹配的服务和工人,这段代码找到了一些工人的匹配服务。

def FooWorker
  def service_klass
    self.class.name
        .then(&:underscore)
        .then { |name| name.split('_') }
        .then { |name| name[0...-1] << :service }
        .then { |name| name.join('_') }
        .classify
        .safe_constantize
  end
end

FooWorker.service_klass # -> FooService

标签: ruby-on-railsrubyoptimization

解决方案


你为什么不直接用Worker替换Service

def service_klass
  self.class.name.sub(/Worker\z/, 'Service').safe_constantize
end

推荐阅读