首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoMapper父继承

MongoMapper父继承
EN

Stack Overflow用户
提问于 2010-01-05 05:06:40
回答 1查看 1.3K关注 0票数 7

我试图通过在MongoMapper中使用类继承来获得更好、更有条理的结果,但遇到了一些麻烦。

代码语言:javascript
复制
class Item
  include MongoMapper::Document

  key :name, String
end

class Picture < Item
  key :url, String
end

class Video < Item
  key :length, Integer
end

当我运行以下命令时,它们并不完全返回我所期望的结果。

代码语言:javascript
复制
>> Item.all
=> [#<Item name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Video.all
=> [#<Video name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Picture.all
=> [#<Picture name: "Testing", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]

它们都是相同的结果,我希望Item.all列出所有的结果,所以包括它自己、PictureVideo。但如果项目实际上是一个Picture,我希望在运行Picture.all时返回它,而不是在运行Video.all时返回它。你明白我的意思吗?

我误解了这里的继承是如何工作的吗?如果我是,那么复制这种行为的最佳方式是什么?我正在尝试遵循this (第二点)作为我想要如何工作的指导方针。我假设他可以运行Link.all来查找所有链接,而不是包含从Item继承的所有其他类。我说错了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-01-06 13:37:38

您链接到的示例有一点误导(或者只是很难理解),因为它没有显示Item模型的完整定义。为了在模型中使用继承,您需要在父模型上定义一个关键的_type。然后,MongoMapper会自动将该键设置为该文档的实际类的类名。所以,举个例子,你的模型现在看起来像这样:

代码语言:javascript
复制
class Item
  include MongoMapper::Document

  key :name, String
  key :_type, String
end

class Picture < Item
  key :url, String
end

class Video < Item
  key :length, Integer
end

搜索的输出(假设您创建了一个Picture对象)将转换为:

代码语言:javascript
复制
>> Item.all
=> [#<Picture name: "Testing", _type: "Picture", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
>> Video.all
=> []
>> Picture.all
=> [#<Picture name: "Testing", _type: "Picture", created_at: Sun, 03 Jan 2010 20:02:48 PST -08:00, updated_at: Mon, 04 Jan 2010 13:01:31 PST -08:00, _id: 4b416868010e2a04d0000002, views: 0, user_id: 4b416844010e2a04d0000001, description: "lorem?">]
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2002235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档