【问题标题】:How to combine combine any_of with between in Mongoid 4?如何在 Mongoid 4 中结合 any_of 和 between?
【发布时间】:2014-06-19 08:22:52
【问题描述】:

我在this SO post 中读到过,您可以像这样将any_ofbetween 结合起来:

webshop = Webshop.first

webshop.orders.any_of(
  webshop.orders.between(:datetime_pending, [Time.zone.now-7.days, Time.zone.now]).selector, # An error is raised here.
  webshop.orders.between(:datetime,         [Time.zone.now-7.days, Time.zone.now]).selector
)

但是当使用 Mongoid 4 尝试这个查询时,我得到了错误:

ArgumentError: wrong number of arguments (2 for 0..1).
/Users/christoffer/project/vendor/gems/ruby/2.0.0/gems/origin-1.1.0/lib/origin/selectable.rb:63:in `between'
/Users/christoffer/project/vendor/gems/ruby/2.0.0/bundler/gems/mongoid-b91705b0ded8/lib/mongoid/relations/referenced/many.rb:413:in `block in method_missing'
/Users/christoffer/project/vendor/gems/ruby/2.0.0/bundler/gems/mongoid-b91705b0ded8/lib/mongoid/scopable.rb:238:in `with_scope'
/Users/christoffer/project/vendor/gems/ruby/2.0.0/bundler/gems/mongoid-b91705b0ded8/lib/mongoid/relations/referenced/many.rb:412:in `method_missing'

我在这里错过了什么?

【问题讨论】:

  • 用什么方法?请添加完整的错误。
  • 道歉。现在已放入完整的堆栈跟踪。

标签: ruby mongoid mongoid4


【解决方案1】:

根据文档Queryable#between 采用散列(具有范围值的键)。

您是否尝试过传递它而不是数组?

webshop = Webshop.first
now = Time.zone.now
seven_days = now - 7.days
webshop_orders = webshop.orders

webshop_orders.any_of(
  webshop_orders.between(datetime_pending: seven_days..now).selector,
  webshop_orders.between(datetime:         seven_days..now).selector
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多