,可以通过以下步骤实现:
Animal
的模型,它有多个子类(如Cat
和Dog
),你可以在数据库中创建一个名为animals
的表,并在模型中定义相应的关系。Animal
模型中,使用Rails的单表继承(Single Table Inheritance)功能来定义子类的类型。这可以通过在Animal
模型中添加以下代码实现:class Animal < ApplicationRecord
# 设置单表继承
self.inheritance_column = :type_column_name
end
在上述代码中,type_column_name
是你想要用于存储子类类型的数据库列名。默认情况下,Rails使用type
列来存储类型信息。
Cat
和Dog
模型,它们继承自Animal
模型。在子类模型中,你可以定义特定于该子类的属性和方法。class Cat < Animal
# 定义Cat模型的属性和方法
end
class Dog < Animal
# 定义Dog模型的属性和方法
end
rails generate migration CreateAnimals name:string type:string
运行上述命令后,会生成一个迁移文件,你可以在其中定义创建animals
表的具体细节,包括列名和数据类型。
animals
表:rails db:migrate
Animal
的实例,包括Cat
和Dog
:animals = Animal.all
这将返回一个包含所有Animal
实例的集合,无论它们是Cat
还是Dog
。
总结: 使用Rails从单表继承中获取混合类型的集合,需要定义一个包含所有子类的父类模型,并使用单表继承功能来存储子类的类型信息。然后,创建子类模型,并在数据库中创建相应的表。最后,你可以通过查询父类模型来获取包含所有子类实例的集合。
腾讯云相关产品推荐:
领取专属 10元无门槛券
手把手带您无忧上云