Я пытаюсь получить лучший и организованный результат использования наследования классов с 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
=> [#- ]
>> Video.all
=> [#
Они являются всеми одинаковыми результат, я ожидал бы иметь Item.all
перечислите все результаты, так включая себя, Picture
, и Video
. Но если объект на самом деле a Picture
, Я хотел бы, чтобы это было возвращено, если бы я работал Picture.all
и не, если я работаю Video.all
. Вы видите то, что я имею в виду?
Я неправильно понимаю, как наследование работает здесь? Если я - то, что лучший способ состоит в том, чтобы копировать этот вид поведения? Я пытаюсь следовать, это (укажите 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?">]