我对 Mongoid 有点陌生,我正在尝试在我的模型中构建一种复杂的范围。我希望能够做这样的事情:
scope :for_currency, ->(currency){ where(price.currency.iso_code: currency.iso_code) }
我想要此范围的模型名为 PaymentTerm,与 Price 模型具有 has_one 关系,该模型属于 货币模型。正如您所看到的,我正在尝试获取 PaymentTerms,其中 价格 的 货币 ISO 编码为我作为参数传递给 block 的值。
有谁知道实现这一目标的有效方法吗?非常感谢,
最佳答案
认为你应该定义一个方法来解决它
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) }
冗余数据将使速度更快。
关于ruby-on-rails - 如何在 Mongoid 中构建复杂的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25924670/