gpt4 book ai didi

MongoMapper 父继承

转载 作者:行者123 更新时间:2023-12-04 11:17:26 26 4
gpt4 key购买 nike

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

class Item
include MongoMapper::Document

key :name, String
end

class Picture < Item
key :url, String
end

class Video < Item
key :length, Integer
end

当我运行以下命令时,它们并没有完全返回我所期望的。
>> 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列出所有结果,包括它本身, Picture , 和 Video .但如果该项目实际上是 Picture , 如果我跑 Picture.all 我希望它被退回而不是如果我运行 Video.all .你明白我的意思吗?

我是否误解了继承在这里的工作方式?如果我是复制这种行为的最佳方式是什么?我正在尝试关注 this (第 2 点)作为我希望这项工作的指导方针。我猜他能跑 Link.all查找所有链接,而不包括从 Item 继承的所有其他类.我错了吗?

最佳答案

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

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 对象)将变成:
>> 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?">]

关于MongoMapper 父继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2002235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com