1

基本モデルから継承した一連のモデルがありますProperties

例えばBars, Restaurants, Cafes, etc.

class Property
  include MongoMapper::Document

  key :name, String
  key :_type, String
end

class Bar < Property

私が疑問に思っているのは、レコードがたまたまバーとレストランの両方である場合のケースをどうするかということです。単一のオブジェクトが両方のモデルの属性を継承する方法はありますか? そして、キー :_type でどのように機能しますか?

4

1 に答える 1

2

ここにモジュールが必要だと思います。

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!

このようにして、コードを複製することなく、多くのモデルにレストランのプロパティを持たせることができます。

私自身は試していませんが、複数レベルの継承を試すこともできます。例えば:

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 がこれをサポートしているかどうかはよくわかりませんが、サポートしない理由がわかりません。

于 2010-03-16T00:24:02.070 に答える