【发布时间】:2011-11-29 11:58:16
【问题描述】:
在 Mongoid 中是否可以得到真正的多态性?
例子:
class Company
include Mongoid::Document
has_many :workers, as: :workable
end
class Worker
include Mongoid::Document
field :hours
belongs_to :workable, polymorphic: true
end
class Manager < Worker
field :order
has_many :contributors
end
class Contributor < Worker
field :task
end
这样做的问题是它通过工人超类来试图找出引用的文档类型。这意味着虽然 HOURS 可以操作,但属于子类的字段不能像 CONTRIBUTORS、ORDER、TASK 一样。有没有办法让这个真正多态?
当我说真正的多态时,详细说明一下,我的意思是可以将对象作为工作人员并在以后确定它们的类型,以便可以设置它们的特定字段。所以我有能力遍历所有的工人,也有能力在构造 Contributor 或 Manager 时设置工人的特定字段,例如 order 和 task。
另外,如果多态是可行的,那么控制器和视图在公司中填写经理和贡献者的字段会是什么样子?
谢谢
【问题讨论】:
-
任务集合呢?
-
任务和贡献者集合在示例中无关紧要。我把它们放进去完成这个例子。假装他们有与工人不同的领域
标签: ruby-on-rails mongodb polymorphism mongoid database-schema