关于Rails 4(多个引擎)的顾虑

时间:2014-06-19 13:11:36

标签: ruby-on-rails-4 dry rails-engines rails-models

更新!

我已经解决了这个问题,尽管我非常感谢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

当我尝试将它们包含在引擎中的模型中时,它不起作用,我感觉这是设计的,但我想知道是否有正确的方法来执行此操作。

它应该被抽象成宝石吗?

如果是这样,有什么想法可以设置宝石?

非常感谢您的帮助,我希望保持代码非常干燥,因为代码库只会扩展。

0 个答案:

没有答案