Ruby on rails 具有多个类型的STI的mongo映射器?
我有一系列模型,所有这些模型都继承自一个基本模型Ruby on rails 具有多个类型的STI的mongo映射器?,ruby-on-rails,ruby,mongodb,single-table-inheritance,mongomapper,Ruby On Rails,Ruby,Mongodb,Single Table Inheritance,Mongomapper,我有一系列模型,所有这些模型都继承自一个基本模型Properties 例如酒吧、餐厅、咖啡馆等 class Property include MongoMapper::Document key :name, String key :_type, String end class Bar < Property 类属性 包含MongoMapper::文档 关键字:名称、字符串 键:\类型,字符串 结束 类条
Properties
例如酒吧、餐厅、咖啡馆等
class Property
include MongoMapper::Document
key :name, String
key :_type, String
end
class Bar < Property
类属性
包含MongoMapper::文档
关键字:名称、字符串
键:\类型,字符串
结束
类条<属性
我想知道的是,当一张唱片碰巧同时是一家酒吧和一家餐厅时,该怎么办?一个对象是否可以继承两个模型的属性?它将如何与键一起工作:_type?我想您需要一个模块
class Property
include MongoMapper::Document
key :name, String
key :_type, String
end
module Restaurant
def serve_food
puts 'Yum!'
end
end
class Bar < Property
include Restaurant
end
Bar.new.serve_food # => Yum!
类属性
包含MongoMapper::文档
关键字:名称、字符串
键:\类型,字符串
结束
模块餐厅
提供食物
放上“赞!”
结束
结束
类条<属性
包括餐厅
结束
Bar.new.serve#u食物#=>好吃!
通过这种方式,您可以让许多模型具有餐厅的属性,而无需复制代码
你也可以尝试,尽管我自己还没有尝试过,是多层次的继承。e、 g:
class Property
include MongoMapper::Document
key :name, String
key :_type, String
end
class Restaurant < Property
key :food_menu, Hash
end
class Bar < Restaurant
key :drinks_menu, Hash
end
类属性
包含MongoMapper::文档
关键字:名称、字符串
键:\类型,字符串
结束
高级餐厅<物业
关键词:食物菜单,杂烩
结束
班级酒吧<餐厅
关键:饮料、菜单、杂烩
结束
我不确定MongoMapper是否支持这一点,但我不明白为什么它不支持。不是模型继承了其他模型,我知道如何做到这一点,我想知道的是一些特殊情况,其中一个特定记录的行为类似于两个模型之间的混合。在我的最后一个示例中就是这种情况-保存的酒吧记录将同时具有食物菜单和饮料菜单。你的意思不同吗?