我正在尝试在两个ruby服务之间共享一种方法,这些服务有很多共同点,并且它们都在同一模块内。
TranslatorManager
是启用服务的模块:CacheEraser
和Translator
。
共享方法为key_cache
,我需要从CacheEraser
和Translator
服务中调用它,仅对它们而言,它仅与TranslatorManager有关,因此我假设这段代码必须在模块文件translator_anager.rb
每个服务都有其文件,所有这些文件都在文件夹app/services/site/translator_manager/
对我来说,这是正确的文件组织,对吗?
如何从key_cache
服务方法调用call
?这不起作用
key_cache
是一个类方法吗?如何考虑到不同的文件来扩展它?我已经尝试过此answer,但无法正常工作。cache_eraser.rb
module Site
module TranslatorManager
class CacheEraser < ApplicationService
def initialize(company_id, text, head_locale, locale)
@company_id, @text, @head_locale, @locale = company_id, text, head_locale, locale
end
def call
# ---> Don't work <----
Rails.cache.delete key_cache(@company_id, @text, @head_locale, @locale)
end
end
end
end
translator_manager.rb
module Site
module TranslatorManager
def key_cache(company_id, text, head_locale, locale)
# return a string
end
def translatable_key?(key)
# return true or false
end
end
end
答案 0 :(得分:1)
您需要在Site::TranslatorManager
类中包含CacheEraser
模块:
module Site
module TranslatorManager
class CacheEraser < ApplicationService
include Site::TranslatorManager # include module methods
def initialize(company_id, text, head_locale, locale)
@company_id, @text, @head_locale, @locale = company_id, text, head_locale, locale
end
def call
# ---> will work <----
Rails.cache.delete key_cache(@company_id, @text, @head_locale, @locale)
end
end
end
end