我已经解决了这个问题,尽管我非常感谢ClassMethods的建议,因为它似乎可以提高代码质量。
关注的问题是(这是一个愚蠢的错误)我删除了一个问题并将其与另一个问题结合起来,因此这种关注确实不存在。因此,担忧似乎有效,但我仍然想知道是否有办法抽出助手,以免他们重复。现在我有很多重复的帮助方法,如果可能的话,我想删除它们。
我有一个Rails应用程序,我正在从头开始构建。由于它的范围非常大,我将功能分解为单独的引擎,以期在长期内使其更易于维护。
那就是说,我之前没有使用过这种模式,有几件事情让我感到沮丧。
我遇到的最大问题是:
我已经定义了一些助手和关注点,以尽可能将我的代码保留为DRY,但是您无法在生产环境中分享这些问题(我预计会中途)。
我不想在各种引擎中复制这些问题,而是希望只在一个地方定义它们。
例如,主应用程序中的模型目录(仅包含所有引擎最终使用的内容)包含以下文件(作为示例):
app \
models \
concerns \
mongoidable.rb # Contains Mongoid include statements and basic set up
versionable.rb # Contains versioning code
searchable.rb # Contains basic searching code to set up ElasticSearch in a basic way
等等...
关注的一个例子是:
module Mongoidable
extend ActiveSupport::Concern
module ClassMethods
def column_names
fields.collect { |field| field[0] }
end
end
included do
# All Mongoid documents will be timestamped and versioned by default.
#
# There isn't much reason why not to.
include Mongoid::Document
include Mongoid::Timestamps
include Mongoid::Userstamp
include Mongoid::Audit::Trackable
track_history track_create: true, track_delete: true, track_update: true
end
end
当我尝试将它们包含在引擎中的模型中时,它不起作用,我感觉这是设计的,但我想知道是否有正确的方法来执行此操作。
它应该被抽象成宝石吗?
如果是这样,有什么想法可以设置宝石?
非常感谢您的帮助,我希望保持代码非常干燥,因为代码库只会扩展。