我有一个独立的 Rails 引擎:Admin
.
在那个引擎中,我Sites
通过 GUI 创建。
在引擎中:
module Admin
class Site < ActiveRecord::Base
end
end
在主应用程序中,我从引擎继承Site
,以便在根级别将其用作常量:
class Site < Admin::Site
end
Admin::Site
我这样做是因为将主应用程序的模型、控制器和测试耦合起来感觉不对。但我猜这种方法有一些缺点,我也猜想有人可能会争辩说耦合是相同的。
我怎样才能以比继承更好的方式委派这个?
或者
我是否应该重组我的代码并将Site
类放在主应用程序和引擎都可以使用的 gem 中?我真正想要的是引擎类的接口,以减少入口点,从而减少耦合。
旁注,我总共有 3-4 个这些类驻留在引擎中,但在主应用程序中使用。
编辑:
也许我应该像这样包装它:
class Site
def initialize(args = {})
@klass = Admin::Site.new(args)
end
def method_missing(method_name, *args, &block)
@klass.send(method_name, *args, &block)
end
end
当然,我也可以将界面缩小Site
到只包含我需要Admin::Site
的主应用程序中的内容。