2013-04-03 82 views
0

我有一個mongomapper模型這樣的特定領域: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 

在這裏,我已經建立打開一個名爲found_parametersSet,其中包含所用參數的名稱。爲了進行驗證,我需要確保該設置等於parametername,其ids位於used_parameters陣列中。

它不工作,我已經試過我試過的方式和其他的東西包括:

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

等等

我只是想不出正確的查詢。此外,我總是無法找到合適的mongomapper文檔。在網站上的一切都很簡短,只有幾個例子,特別是對於ruby和mongo作爲一個整體來說,這是非常困難的。

所以,如果有人能解釋更多關於查詢相關文檔的信息,我會很感激。

回答

0

我目前使用的每個循環得到的名稱,並將它們存儲在一個單獨的集合:

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

這工作,因爲它應該,但我想在MongoMapper更優雅的方式可能提供了在單個語句中獲取名稱集合的可能性。