ActiveSupport ::关注和扩展mongoid模型

时间:2013-04-28 18:18:04

标签: ruby-on-rails model mongoid extending

我正在使用带有轨道3的mongoid并且最近来到了一个非常艰难的地方 问题,我需要一个建议。

我正在研究CMS,其中一个想法就是CMS会提供 如果需要,一些基本模型定义和最终用户将扩展 具有自己的定义和控件的基本类,并将它们保存在不同的集合(表)中。

class DcPage
  include Mongoid::Document

  field a ....
  belongs_to b ....
  validates a ....
end

class MyPage < DcPage
  field c ....
  validates c ....
end

直到最后一个版本的mongoid这个工作(带有小黑客)和数据 将保存到my_pages集合中。由于一些问题,mongoid没有 更长时间支持此行为,数据始终保存到dc_pages 集合。

在解释我的问题时,mongoid团队建议我使用 ActiveSupport ::关注并为我提供了一个例子。哪个有效 如果扩展类在同一源文件中定义,那就完全正常了。哪一个 顺便说一句。从未发生在实践中。

module CommonBehaviour
  extend ActiveSupport::Concern

  included do
    field :subject, type: String, default: ''
    # ...
  end
end

class DcPage
  include Mongoid::Document
  include CommonBehaviour
end

class MyPage
  include Mongoid::Document
  include CommonBehaviour
end

到目前为止,我发现如果我需要基本的源文件,它可以工作 我的第二个档案。看起来像这样: 要求'/some/path/to/my/gem/app/models/dc_page.rb

你现在能看到我的痛苦吗?基本源文件当然会被备份 宝石和因此成为一个移动的目标。

请帮助我提供更好的解决方案。

通过 THER

1 个答案:

答案 0 :(得分:1)

这不起作用的原因是因为这是单表继承的模式。 您需要关闭表继承才能使其正常工作。

然而,在这种情况下,来自mongoid devs的建议是正确的路线。 看起来你只需要正确地需要你的模块/类。