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是否支持这一点,但我不明白为什么它不支持。

不是模型继承了其他模型,我知道如何做到这一点,我想知道的是一些特殊情况,其中一个特定记录的行为类似于两个模型之间的混合。在我的最后一个示例中就是这种情况-保存的酒吧记录将同时具有食物菜单和饮料菜单。你的意思不同吗?