は、私はこのようになりますMongoMapperクラスに取り組んでいるとしますMongoMapperのオプションキーまたはキャッチオールキーを使用しますか?
class Animal
include MongoMapper::Document
key :type, String, :required => true
key :color, String
key :feet, Integer
end
今、私は鳥の翼幅を保存したいです。多くのドキュメントには無関係だと少しだらしない感じにもかかわらず、これを追加する方が良いでしょう:
key :wingspan, Float
またはこの、それはindescriptiveキャッチオールハックのように感じていることだにもかかわらず:
key :metadata, Hash
メタデータアプローチ(私が継承しているコードには先例があります)は、Mongoドキュメント全体にとってはほとんど冗長です。両方とも、キーと値のペアのスキーマレスバケットを意図しています。
動物固有のキーを追加すると、かなり醜いモデルに滑りやすい斜面であるようにしかし、それにも思えます。
代替手段(Birdサブクラスを作成する)はありますか?
興味深い - 私はちょうど遊んで、未定義のキーが実際に格納され、取得されたことを確認しました。それでは、あなたのモデルでキーを定義する点は何でしょうか?(デフォルトの設定と:required => true以外の)? – Ross
さて、 'key'コールは' def my_attr'と 'def my_attr ='を実行しますので、 'bird.wingspan'を実行できます。未定義のキーの場合、 'key'はオブジェクトがデータベースからロードされるまで呼び出されません_したがって、あなたのアプリケーションが寒い場合(例えばテスト)、' Bird.new.wingspan'は 'key:wingspan' hasnのため' NoMethodError'を送出しますまだ起こっていない。 –