在一个命名空间下组织单独的子模型

Organize separate child Models under one namespace

我正在构建一个应用程序,允许用户使用可配置的小部件(本质上只是网站的子对象)创建自定义网站。目前每个小部件都是自己独立的模型,因此我必须通过用户的站点对象(例如 @site.headers@site.galleries.

单独访问它们

我想做的是设置一种方法来引用一个命名空间 Widget 下的这些单独的子对象,这样我就可以只使用 @site.widgets 到 return 我所有的散列属于站点的单个子对象。

我已经研究了下面类似的内容,但我认为 :class_name 不接受数组。

has_many :widgets, :foreign_key => 'site_id', :class_name => ['Header', 'Gallery']

无法将此定义为关联。相反,您可以定义自己的方法:

def widgets
  headers + galleries
end

但请记住,此方法的结果将很简单 Array,而不是 ActiveRecord::Relation - 因此您将无法对此调用 AR 范围方法。