如何在Rails中使用多态创建另一个对象的子对象

时间:2012-01-14 07:17:19

标签: ruby-on-rails ruby activerecord clone

我有两个类TutorSession,它们在多态关系中共享相同的子类Field

当导师创建会话时,我希望将标题自动从教师复制到会话(即,新的条目将添加到“字段”表中)。例如,

t = Tutor
Session.fields.build_from_tutor(t.fields)

我只是编造build_from_tutor方法。是否有Rails / Ruby方法可以做到这一点?

谢谢。

1 个答案:

答案 0 :(得分:1)

如果您希望相同的条目作为两个类的子元素存在,那么这不是多态的;这只是混淆继承。可以是Tutor has_many :sessionsSession has_many :fields,也可以是Tutor has_many :fields, :through => :sessions,或者是Tutor has_many Sessions, :as => :fieldableSession has_many :fields, :as :feildableField belongs_to :fieldable, :polymorphic => true,但这将阻止Tutor和Session 分享一个字段。

所以你需要搞清楚。然后你就可以找到一个理智的建设者。但是,如果你拥有它,你将永远无法规范化你的数据模型。即使对于Rails应用程序,您也应该将自己保持在3NF作为最低标准,恕我直言。