2014-09-19 24 views
2

我對Mongoid有點新,我試圖在我的模型中構建一種複雜的作用域。我希望能夠做這樣的事情:如何在Mongoid中構建複雜的作用域

scope :for_currency, ->(currency){ where(price.currency.iso_code: currency.iso_code) } 

的模式,我想這個範圍的,命名爲PaymentTerm,有HAS_ONE關係到價格模型,belongs_to的一個貨幣模型。正如你所看到的,我試圖讓PaymentTerms其中其價格貨幣ISO與我作爲參數傳遞到塊的價值編碼。

有沒有人知道一個偉大而有效的方法來實現這一目標?非常感謝,

回答

3

認爲你應該定義一個方法來解決它

def self.for_currency(currency) 
    self.all.select {|pt| pt.currency.iso_code == currency.iso_code } 
end 

它會返回一個數組的結果,但不是一個mongoid ::標準。我建議,如果經常使用此範圍內,在PaymentTerm模型創建一個新的領域,以保存該代碼像field :currency_iso_code,然後

scope :for_currency, ->(currency){ where(currency_iso_code: currency.iso_code) } 

冗餘數據將更加更快的速度。

+0

我會試着按照你說的去定義一個方法。我會考慮你對冗餘的建議。我非常感謝你的回答!最好, – 2014-09-19 02:21:33

+0

該方法絕對奏效!謝謝!。 – 2014-09-19 15:20:52

+0

我想問你一件事dddd1919。此方法返回所選結果的數組。有沒有辦法返回一個Mongoid Criteria,這樣我就可以將它鏈接起來,就像它是一個範圍一樣? – 2014-09-20 14:00:13