Монго маппер с ИППП с более чем одним типом? - PullRequest
1 голос
/ 16 марта 2010

У меня есть ряд моделей, которые наследуются от базовой модели Properties

Например Bars, Restaurants, Cafes, etc.

class Property
  include MongoMapper::Document

  key :name, String
  key :_type, String
end

class Bar < Property

Что меня интересует, так это что делать со случаем, когда пластинка оказывается одновременно баром и рестораном? Есть ли способ для одного объекта наследовать атрибуты обеих моделей? И как это будет работать с ключом: _type?

1 Ответ

2 голосов
/ 16 марта 2010

Я думаю, вам нужен модуль здесь.

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!

Таким образом, многие модели могут иметь свойства ресторана без дублирования кода.

То, что вы также можете попробовать, хотя я сам не экспериментировал с этим, это множественные уровни наследования. 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 это, но я не понимаю, почему это не так.

...