为什么这个 where 查询不再适用于 ShopifyAPI?

Why does this where query no longer work properly for ShopifyAPI?

我正在尝试通过 REST ShopifyAPI 在 Checkout class 和 Order class 上做一个简单的 where 查询,但它保持返回不准确的数据。

这里有两个例子:

[12] pry(main)> Order.count
=> 9
[13] pry(main)> Order.where(created_at: (Time.now - 1.minute)..(Time.now)).count
=> 9
[14] pry(main)> Order.where(created_at: (Time.now - 1.second)..(Time.now)).count
=> 9
[15] pry(main)> Order.first.created_at
=> "2021-05-15T02:59:36-05:00"
[16] pry(main)> Order.last.created_at
=> "2021-04-23T02:43:44-05:00"

Checkout也是一样:

[8] pry(main)> Checkout.where(created_at: (Time.now - 24.hours)..(Time.now)).count
=> 6
[9] pry(main)> Checkout.where(created_at: (Time.now - 10.minutes)..(Time.now)).count
=> 6
[10] pry(main)> Checkout.where(created_at: (Time.now - 1.minute)..(Time.now)).count
=> 6
[11] pry(main)> Checkout.count
=> 6
[18] pry(main)> Checkout.first.created_at
=> "2021-04-29T00:13:16-05:00"
[19] pry(main)> Checkout.last.created_at
=> "2021-05-15T03:00:37-05:00"

这可能是什么原因?

编辑 1

奇怪的是,当我尝试另一个模型时,这个问题似乎没有出现 Product:

[28] pry(main)> Product.where(title: "High Coverage Foundation").count
=> 1
[29] pry(main)> Product.count
=> 6

这是我所期待的正确反馈。我也期待 Order 模型有类似的东西,但由于某些原因它不能正常工作。

我已经重启了我的本地终端会话,并重新安装了我的 Shopify-api-cli...无济于事。

编辑 2

查看来自两个 classes 的更多示例,这些示例显示了表明查询应该有效的那些对象的存在。

[51] pry(main)> Order.first.id
=> 3779683877046
[52] pry(main)> Order.last.id
=> 3741986750646
[53] pry(main)> Order.first.created_at
=> "2021-05-15T02:59:36-05:00"
[54] pry(main)> Order.last.created_at
=> "2021-04-23T02:43:44-05:00"
[55] pry(main)> Checkout.first.id
=> "ef8dd57a1b1911da9077df7789698847"
[56] pry(main)> Checkout.last.id
=> "7133c7aeb0ff3b4b506c2a66e4190ee3"
[57] pry(main)> Checkout.first.created_at
=> "2021-04-29T00:13:16-05:00"
[58] pry(main)> Checkout.last.created_at
=> "2021-05-15T03:00:37-05:00"

编辑 3

所以它似乎适用于对具有 string 但不是 integerdatetime 不一致的属性进行的查询:

[79] pry(main)> Order.where(cart_token: '36e017f94cbf19bee298d61334b68225').count
=> 1 // #RIGHT
[80] pry(main)> Order.where(created_at: '2021-05-15T02:59:36-05:00').count
=> 9 // #WRONG
[81] pry(main)> Order.where(current_total_price: 294.14).count
=> 9 // #WRONG
[82] pry(main)> Order.where(email: 'alex@test.com').count
=> 1 // #RIGHT
[83] pry(main)> Order.where(processed_at: '2021-05-15T02:59:35-05:00').count
=> 3 // #RIGHT STRANGELY ENOUGH
[97] pry(main)> Order.where(processed_at: '2021-05-15T02:59:35-05:00').first.id
=> 3779683877046 // #RIGHT
[98] pry(main)> Order.where(processed_at: '2021-05-15T02:59:35-05:00').last.id
=> 3779668639926 // #RIGHT

我在 Shopify 的官方 forum which can be seen here 上得到了回复。

TL;DR,Shopify 的 ruby​​gem 并不完全像 ActiveRecord 那样实现范围日期,它们在模型上使用 created_at_mincreated_at_max 属性。

因此 ShopifyAPI 的正确查询是:

ShopifyAPI::Order.where(created_at_min: Time.now - 6.days, created_at_max: Time.now).count