2012-01-14 75 views
0

我有两个类,TutorSession,它们共享多态关系中相同的子类Field如何从Rails中的多态的另一个对象创建子对象

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

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

我刚刚编译build_from_tutor方法。有没有Rails/Ruby的方式来做到这一点?

谢谢。

回答

1

如果你想让两个类的子节点存在相同的条目,那就不是多态的;这只是混淆的继承。无论是Tutor has_many :sessionsSession has_many :fields,因而Tutor has_many :fields, :through => :sessions,或者作为选择,Tutor has_many Sessions, :as => :fieldable,一个Session has_many :fields, :as :feildableField belongs_to :fieldable, :polymorphic => true,但会妨碍导师和会话不断共享的字段。

所以你需要弄清楚。然后你可以找出一个理智的建筑师。但是你有它的方式,你永远无法正常化你的数据模型。即使对于一个Rails应用程序,你应该把自己作为一个最低标准,即3HO。

+0

谢谢杰森。不,我不希望两个班的同学入学。对于Tutor中的每个主题,都有一条记录。对于Session中的每个主题,都有另一个记录。主题与Tutor AND Session具有多态关系。 – AdamNYC 2012-01-14 07:29:06

+0

也许我对这个问题的表述感到困惑;如果Fields是真正的多态,并且你只希望从'Tutor'复制到'Session'的'title'属性,你可以使用回调函数,也就是说,如果'Tutor'应该与'Session'同时创建,那么:班导师; after_save:make_session; def make_session; self.topic.build_session(:title => self.title); end; end'这种方法的问题在于你违反了3NF和DRY原则;你正在复制数据库中的信息。如果你需要'title'存在两条记录中,你应该修改你的数据库模式。 – 2012-01-14 07:53:45

相关问题