Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从Rails中具有多态性的另一个对象创建子对象_Ruby On Rails_Ruby_Activerecord_Clone - Fatal编程技术网

Ruby on rails 如何从Rails中具有多态性的另一个对象创建子对象

Ruby on rails 如何从Rails中具有多态性的另一个对象创建子对象,ruby-on-rails,ruby,activerecord,clone,Ruby On Rails,Ruby,Activerecord,Clone,我有两个类,Tutor和Session,它们在多态关系中共享同一个子类Field 当导师创建课程时,我希望将标题从导师自动复制到课程(即,新条目将添加到“字段”表)。比如说, t = Tutor Session.fields.build_from_tutor(t.fields) 我只是用导师的方法补上了build_。有没有Rails/Ruby方法可以做到这一点 谢谢。如果您希望两个类的子类存在相同的条目,那么这不是多态的;那只是混淆了继承。一个导师有多个:会话,一个会话有多个:字段,因此一个导

我有两个类,
Tutor
Session
,它们在多态关系中共享同一个子类
Field

当导师创建课程时,我希望将标题从导师自动复制到课程(即,新条目将添加到“字段”表)。比如说,

t = Tutor
Session.fields.build_from_tutor(t.fields)
我只是用导师的方法补上了build_。有没有Rails/Ruby方法可以做到这一点


谢谢。

如果您希望两个类的子类存在相同的条目,那么这不是多态的;那只是混淆了继承。一个
导师有多个:会话
,一个
会话有多个:字段
,因此一个
导师有多个:字段::通过=>:会话
,或者一个
导师有多个会话::as=>:fieldable
,一个
会话有多个:字段,:as:feildable
,一个
字段属于:fieldable,:polymorphic=>true
,但这将阻止导师和会话共享一个字段


所以你需要弄清楚。然后你就可以找到一个理智的建设者。但按照您的方式,您永远无法规范化您的数据模型。即使对于Rails应用程序,您也应该将自己的最低标准设置为3NF,IMHO。

谢谢Jason。不,我不希望两门课有相同的条目。对于导师中的每个主题,都有一个记录。会话中的每个主题都有另一条记录。话题与导师和课程有着多态性的关系。也许我对问题的措辞感到困惑;如果字段是真正多态的,并且您只想将
标题
属性从
导师
复制到
会话
,您可以使用回调,也就是说,如果
导师
应该与
会话
同时创建,请执行:
课堂导师;保存后:进行会话;def make_会话;self.topic.build_会话(:title=>self.title);结束;结束
这种方法的问题是违反了3NF和DRY原则;您正在复制数据库中的信息。如果需要
title
存在于两个记录中,则应修改数据库模式。