Rails应用程序中模块化设计的建议

时间:2016-09-07 23:26:25

标签: ruby-on-rails ruby

我有一个应用程序将有3个模块,每个模块都在自己的引擎中创建,即:

  1. 管理
  2. 地址簿
  3. 日历
  4. 在“管理”模块中,管理员用户可以添加,编辑和删除其他用户。这些用户中的每一个还将具有一些通用功能,例如应用程序上所有操作的日志以及每个模块的用户权限。

    在地址簿模块中,用户将拥有多个联系人。在日历模块中,用户将拥有许多事件。

    我想创建一个在所有引擎中共享的单独的用户gem /模块,但我不确定如何处理特定于每个引擎的关系/模型。我想过在每个Engine中扩展User模块,包含特定的关系,但是我需要使用Engine的User模型而不是Main App的User模型来调用它的方法(例如,我必须做AddressBook::User.contacts而不是只是User.contacts)。

    这是我唯一的选择,还是我遗漏了一些基本的东西?

    对此有任何建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

Rails引擎可以选择一个孤立的命名空间,它可以像你在AddressBook:User.contacts中描述的那样工作,但它并不总是最好用它。没有它,您可以在应用程序和每个引擎中定义用户模型,根据需要扩展该模型。例如。在应用程序中:

class User < ActiveRecord::Base
  def embiggen
    self.bigness *= 2
  end
end

......并且在引擎中:

class User
  has_many :contacts
end

然后,您始终致电User,并且不必添加Engine::User前缀。