代码之家  ›  专栏  ›  技术社区  ›  Régis B.

Ruby on Rails中的继承:设置基类类型

  •  2
  • Régis B.  · 技术社区  · 14 年前

    我正在Rails内部实现一个单表继承。下面是相应的迁移:

    class CreateA < ActiveRecord::Migration
      def self.up
        create_table :a do |t|
          t.string :type
      end
    end
    

    B类继承自A:

    class B < A
    end
    

    现在,很容易获得B类的所有实例:

    B.find(:all)
    

    A.find_all_by_type("B")
    

    但是我如何找到类A的所有实例(那些不是B类型的实例)?这是一个糟糕的组织吗?

    我试过这个:

    A.find_all_by_type("A")
    

    但是A类的实例有一个 nil 类型。我能做到

    A.find_all_by_type(nil)
    

    但不知怎么的,这感觉不太对劲。尤其是,如果我决定从另一个类继承,它将停止工作。

    是否更适合为:在迁移中键入定义默认值?类似:

    t.string :type, :default => "A"
    

    我在这里做错什么了吗?

    1 回复  |  直到 14 年前
        1
  •  2
  •   Steven Soroka    14 年前

    类型字段更多的是一个子类型,这就是为什么祖先类有一个nil类型。

    实际上,你可以将A类记录的类型设置为“A”,它的行为仍然正常,有一种温暖而模糊的感觉。:)

    class A
      before_create :set_default_type
    
      def set_default_type
        self.type = self.class.name if type.blank?
      end
    end