如何在Mongoid中构建复杂的范围

时间:2014-09-19 00:47:36

标签: ruby-on-rails mongoid

我对Mongoid有点新鲜,我试图在我的模型中构建一种复杂的范围。我希望能够做到这样的事情:

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

我希望此范围的模型名为 PaymentTerm ,与价格模型有 has_one 关系, belongs_to < / em>一个货币模型。正如您所看到的那样,我试图获得支付条款,其价格货币 ISO 用值I&#39; m作为参数传递给块。

有谁知道一个很好的有效方法来实现这个目标?非常感谢,

1 个答案:

答案 0 :(得分:3)

认为你应该定义一个解决它的方法

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

它将返回一个数组结果,但不会返回mongoid :: Criteria。我建议如果经常使用此范围,请在PaymentTerm模型中创建一个新字段,以保存此代码,如field :currency_iso_code,然后

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

冗余数据将使速度更快。