Rails Rails 中的多表继承

shawnyu · 2012年01月16日 · 最后由 pzgz 回复于 2012年02月04日 · 6114 次阅读

单表继承比较简单,资料相对也多 但是多表继承,基本上找不到什么靠谱的资料 求指点 最近项目中,有用到 两个表的字段相差较大. 不胜感谢 不管是思路或者资料

首先感谢:@bony

我举个例子吧

class Order < ActiveRecord::Base
  # here goes the code
end

class TaobaoOrder < Order
  # some code
end

class PaipaiOrder < Order
  # some code
end

就像这样的继承 然后让 TaobaoOrder 和 PaipaiOrder 都有自己的表

----------- 华丽的分割线 --------------------------- 再次感谢大家的回复 我会一一尝试

你要不要考慮單獨兩個不同的 model 然後再寫 module 進行 mixin

没必要分开,把相同属性比如价格呀、标题呀什么的放一起。不同属性再搞一个 has_one 的结构分别存起来。这样比较方便。

楼主如果时间充足可以了解下 Mongoid Mongoid 实现就比较简单。可以在继承的类中定义字段

class Order
  include Mongoid::Document

  field :common,type: String
end

class TaobaoOrder < Order
  field :taobao_field,type:String
end

class PaipaiOrder < Order
  field :paipai_field,type:String
end

另外 Mongoid 支持 dynamic_fields,即使没定义也可以赋值。不过个人会将 allow_dynamic_fields to false

这样是不是一个好的实践呢?@xdite,@bony,@ywencn

匿名 #5 2012年01月16日

Order 内 def abstract_class?; true; end 另外的方法是将共有的部分做成 minxin 的 module

我刚开始折腾了一会儿这个,最后得出结论 MTI 还是 Rails 的痛啊,不是很方便

需要 登录 后方可回复, 如果你还没有账号请 注册新账号