Rails:单表继承 - 具有特定属性的子类模型

时间:2018-03-21 04:25:37

标签: ruby-on-rails activerecord rails-activerecord single-table-inheritance

假设我有一个名为Animal的模型,其属性为species

我打算从Tiger继承Animal,属性species是" tiger",如何定义它以便

Animal.where(:species => 'tiger').where(:age => 12)

可以写成

Tiger.where(:age => 12)

我的尝试解决方案:

class Tiger < Animal    
  def self.inherited(child)
    child.instance_eval do
      def type
        "tiger"
      end
    end
    super
  end
end

参考文献:  1. http://eewang.github.io/blog/2013/03/12/how-and-when-to-use-single-table-inheritance-in-rails/  2. http://www.alexreisner.com/code/single-table-inheritance-in-rails

1 个答案:

答案 0 :(得分:0)

虽然我了解您的问题,但您只想实施简单的STI。

我试过了,它对我有用。创建一个基类Animal 动物表属性将是物种名称年龄

2018-03-21 05:29:31,817 2296 DEBUG odoo odoo.api: call crm.lead().load_views(options={u'load_fields': False, u'load_filters': True, u'toolbar': True, u'action_id': 141}, views=[[347, u'kanban'], [350, u'list'], [349, u'form'], [None, u'graph'], [None, u'calendar'], [None, u'pivot'], [352, u'search']]) etc...

继承的类。

class Animal < ApplicationRecord
  self.inheritance_column = :species

  def self.species
    %w(Lion Tiger)
  end
end

试着希望它能解决你的问题。