我有一个应用程序将有3个模块,每个模块都在自己的引擎中创建,即:
在“管理”模块中,管理员用户可以添加,编辑和删除其他用户。这些用户中的每一个还将具有一些通用功能,例如应用程序上所有操作的日志以及每个模块的用户权限。
在地址簿模块中,用户将拥有多个联系人。在日历模块中,用户将拥有许多事件。
我想创建一个在所有引擎中共享的单独的用户gem /模块,但我不确定如何处理特定于每个引擎的关系/模型。我想过在每个Engine中扩展User模块,包含特定的关系,但是我需要使用Engine的User模型而不是Main App的User模型来调用它的方法(例如,我必须做AddressBook::User.contacts
而不是只是User.contacts
)。
这是我唯一的选择,还是我遗漏了一些基本的东西?
对此有任何建议将不胜感激。
答案 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
前缀。