0

我有一个这样的 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 

在这里,我建立了一个包含所用参数名称的调用Setfound_parameters为了验证,我需要确保这个集合等于数组中names 的parameters 。idsused_parameters

它不像我尝试过的那样工作,我尝试过的其他事情包括:

used_parameters.name
used_parameters[:name]
parameters.name
parameters[:name]
Parameter.find(used_parameters)[:name]

ETC...

我只是想不出正确的查询。此外,我总是无法找到适合 mongomapper 的文档。网站上的所有内容都非常简短,几乎没有示例,尤其是对于 ruby​​ 和 mongo 的新手来说,这更加困难。

因此,如果有人可以解释更多有关查询相关文档的信息,我将不胜感激。

4

1 回答 1

0

我目前正在使用每个循环来获取名称并将它们存储在单独的集合中:

parameters.each do |par|
    used_param_names << par.name
end

这可以正常工作,但我想要一种更优雅的方式,因为 MongoMapper 可能提供了在单个语句中获取名称集合的可能性。

于 2013-04-04T09:08:09.310 回答