我对Mongoid有点新鲜,我试图在我的模型中构建一种复杂的范围。我希望能够做到这样的事情:
scope :for_currency, ->(currency){ where(price.currency.iso_code: currency.iso_code) }
我希望此范围的模型名为 PaymentTerm ,与价格模型有 has_one 关系, belongs_to < / em>一个货币模型。正如您所看到的那样,我试图获得支付条款,其价格的货币 ISO 用值I&#39; m作为参数传递给块。
有谁知道一个很好的有效方法来实现这个目标?非常感谢,
答案 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) }
冗余数据将使速度更快。