我希望在Rails中使用Multiple / Class表继承来启动一个项目。要做到这一点,我打算使用Sequel而不是ActiveRecord。可以在此处找到文档 - Sequel - class table inheritance
我有一个插件工作到一定程度,我可以调用child.first它将给我第一个子类,它不是父类的第一个,它包含子表中的数据。问题是另一种方式......
所以,如果我通过父类加载一个db行,那么恰好是一个child2类
p = Parent.first <Parent @values = {kind = "Child2"}>
然后尝试使用它应该给我的文档中列出的刷新命令来获取子数据
p.refresh <Parent @values = {kind = "Child2", child2data = "data from child 2 table"}>
但它没有,它只返回未经改变的父
我在父类
中包含了模型地图 plugin :class_table_inheritance,:key=>"kind", :model_map=>{"Child1"=>:Child1,"Child2"=>:Child2}
我玩过不同的价值观和其他无意义的尝试让它发挥作用,但没有成功。
我理想的是能够找到父级并调用一个方法来实例化子类,所以
p = Parent.first
c = p.child
c <Child2 @values = {kind: "Child2", Child2data: "data from child2 table">
我觉得我可能会破解/添加一个方法到我的父类来做这个但是这只是感觉非常简单,我不应该这样,而且刷新方法不起作用的事实让我担心并且像id一样要解决的问题
有人有答案吗? ty阅读
P.S。我正在使用rails 5,rails-sequel gem,我正在一个或多或少空白的项目中工作,我只想拥有一个像样的CTI设置,因为对我来说它似乎比Polymorphic协会更优雅。
答案 0 :(得分:0)
在插件调用中使用:key=>:kind
,这可以解决您的问题。如果您想要p.child
方法,请使用关联而不是class_table_inheritance插件。