续集类表继承

时间:2016-11-09 13:43:44

标签: ruby-on-rails ruby inheritance sequel class-table-inheritance

我希望在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协会更优雅。

1 个答案:

答案 0 :(得分:0)

在插件调用中使用:key=>:kind,这可以解决您的问题。如果您想要p.child方法,请使用关联而不是class_table_inheritance插件。