私はこのようなmongomapperモデルを持っています:
class ChildTemplate
include MongoMapper::Document
plugin MongoMapper::Plugins::IdentityMap
key :name, String, :required => true, :unique => true
key :description, String
key :config, Array
key :used_parameters, Array
many :parameters, :in => :used_parameters
validate :parameters_in_config
def parameters_in_config
found_parameters = Set.new
config.each do |line|
params = line.scan("<([-+*]{2})(.+)1>")
unless params.empty?
found_parameters |= params.transpose[1]
end
end
unless found_parameters == Parameter.find(used_parameters).fields(:name).to_set
errors.add(:parameters, "Incorrect")
end
end
end
class Parameter
include MongoMapper::Document
plugin MongoMapper::Plugins::IdentityMap
key :name, String
key :description, String
#more keys
end
問題はこの行です:
unless found_parameters == Parameter.find(used_parameters).fields(:name).to_set
ここで、私は Set
と呼ばれる found_parameters
使用されるパラメータの名前が含まれています。検証のために、私はこのセットが name
の parameter
彼の ids
の used_parameters
アレイ。
それは私が試したやり方ではうまくいかず、私が試した他のことも含まれています:
used_parameters.name
used_parameters[:name]
parameters.name
parameters[:name]
Parameter.find(used_parameters)[:name]
等...
私はちょうど適切なクエリを把握できません。 また、私はいつもmongomapperのための適切な文書を見つけるのに苦労しています。ウェブサイト上ではすべてのことがほんの一例であり、特にルビーとモンゴの騒ぎについてはそれほど難しいことはありません。
だから、もし誰かが関連する文書を照会することについてもっと説明できたら、それを感謝します。
回答:
回答№1は0私は現在、それぞれのループを使って名前を取得し、それらを別々のコレクションに格納しています:
parameters.each do |par|
used_param_names << par.name
end
これはうまくいくはずですが、私はMongoMapperがおそらく単一のステートメントで名前の集合を得る可能性を提供するという点でよりエレガントな方法を望みます。