MongoMapper では、クラスはスーパークラスからキーとメソッドを継承できます。ここでは、整数キー「baz」を含むコードと、そのインスタンスの baz 値を連続したカウント数に設定する単純な並べ替えメソッドを記述しました。
require 'mongo_mapper'
require './init/mongo_init' # Load database connection
class Sortable
include MongoMapper::Document
key :baz, Integer
def self.sort_baz
counter = 0
Sortable.each do |record|
record.baz = counter
counter += 1
record.save
end
end
end
class Model < Sortable
include MongoMapper::Document
key :foo, String
key :bar, String
end
Model.delete_all
model1 = Model.new.save
model2 = Model.new.save
model3 = Model.new.save
Model.sort_baz
Model.all.each do |record|
puts record.inspect
end
結果は次のとおりです。
#<Model _id: BSON::ObjectId('525ecd73ab48655daa000001'), _type: "Model", baz: 0>
#<Model _id: BSON::ObjectId('525ecd73ab48655daa000002'), _type: "Model", baz: 1>
#<Model _id: BSON::ObjectId('525ecd73ab48655daa000003'), _type: "Model", baz: 2>
これが私の質問です。Ruby は複数の継承をサポートしていないため、Ruby ではモジュールとインクルードを使用することをお勧めします。
しかし、MongoMapper ドキュメントはモジュールではなく、クラスでなければなりません。言い換えれば、これは私がやりたいことですが、うまくいきません:
module Sortable
include MongoMapper::Document
key :baz, Integer
def self.sort_baz
counter = 0
self.each do |record|
record.baz = counter
counter += 1
record.save
end
end
end
module OtherFunctionality
include MongoMapper::Document
key :bam, Integer
end
class Model
include MongoMapper::Document
key :foo, String
key :bar, String
include Sortable
include OtherFunctionality
end
ケースバイケースで MongoMapper キーとクラスメソッドの複数の再利用可能なセットをきれいに組み合わせる方法はありますか?