ruby-on-rails - 如何在 Mongoid 中构建复杂的作用域

标签 ruby-on-rails mongoid

我对 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/

相关文章:

ruby-on-rails - 来自 Controller 的mongoid随机

ruby - 覆盖 Mongoid 模型的 setter 和 getter

ruby - 在 Mongoid 文档中保存和获取哈希

ruby-on-rails-3 - 如何删除 mongodb 数据库?

ruby-on-rails - rails g mongoid :config not working Rails 6. 1

ruby-on-rails - Ruby on Rails 在 jsonb(哈希)中验证日期

ruby-on-rails - after_create 回调似乎无法正常工作

ruby-on-rails - 创建has_many :through records 2x times

ruby-on-rails - Elasticsearch/轮胎 : Facets Order

ruby-on-rails - Rails 5 事件记录查询,其中日期范围与其他日期范围重叠