1

Rails 3でmongoidを使用していますが、この問題に遭遇しました:

Shape モデルがあるとします。

class Shape
  include Mongoid::Document
  field :x, type: Integer
  field :y, type: Integer
  embedded_in :canvas
end

Canvas モデル (多くの Shapes を持っています):

class Canvas
  include Mongoid::Document
  field :name, type: String
  embeds_many :shapes
end

次に、Canvas モデルには「多くの形状があります」。

Canvas から継承された Browser モデルがあります。

class Browser < Canvas
  field :version, type: Integer
end

すると、Browswer モデルは「多くの形状を持つ」ようになります。

しかし、今では Shape から継承された "Circle" モデルがあります。

class Circle < Shape
  field :radius, type: Float
end

そして、ブラウザモデルを「多くの形状を持つ」のではなく「多くの円を持つ」ようにしたいと考えています。つまり、Browser モデルの「has many」関係を「has many Shapes」から「has many Circles」に上書きしたいのです。

どうすればいいですか?

4

1 に答える 1

0

embeds_many :circles100% 確実ではありませんが、Browser モデルにfor という行を追加するだけでよいと思います。継承された関係を削除する必要はありません。

Circle は Shape を継承するため、円はブラウザ ドキュメントの「shapes」キーに格納された配列に格納され、_type 属性が「Circle」に設定されます。言い換えれば、embeds_many :shapes関係を持っていても、多くの円を埋め込んでも作成されないものは DB に作成されません。

ただし、利用可能ななどのメソッドがあることを意味しますがBrowser.frist.shapes、これらは単に無視できます。を追加するembeds_many :circlesと、 など、そのリレーションのメソッドが提供されBrowser.first.circlesます。

于 2012-10-05T08:23:18.627 に答える