Это сводит меня с ума, и я бы хотел увидеть на это отдельную пару глаз.У меня есть следующие модели:
class Client
has_many: client_orders
end
class ClientOrders
belongs_to :client
end
Сейчас я пытаюсь получать заказы только для клиентов, созданных за последние 30 дней.Поэтому я пишу это:
time_range = (30.days.ago - 1.day)..Time.now.midnight
@clients = Client.left_outer_joins(:client_orders).where( client_orders: { created_at: time_range } )
Я чувствую, что логика верна.Теперь происходит следующее:
Я пишу: @clients.first.client_orders.first
И самая первая запись такова:
=> #<ClientOrder:0x00007f364764b3b8
id: 1,
client_order_number: "25970",
status: "pending",
client_id: 3,
client_user_id: 8,
shipping_cost_cents: 287,
shipping_cost_currency: "USD",
taxes_cents: 8800,
taxes_currency: "USD",
created_at: Fri, 16 Feb 2018 00:00:00 UTC +00:00,
updated_at: Mon, 31 Dec 2018 21:51:54 UTC +00:00,
subtotal_cents: 3426500,
subtotal_currency: "USD",
quickbooks_id: nil,
sync_token: nil,
convenience_fee_cents: 0,
convenience_fee_currency: "USD">
Обратите внимание на дату created_at
?Теперь, что действительно смешно, если я сделаю это:
@clients.first.client_orders.first.created_at === time_range
D, [2019-01-03T06:28:53.885281 #1] DEBUG -- : CACHE ClientOrder Load (0.0ms) SELECT "client_orders".* FROM "client_orders" WHERE "client_orders"."client_id" = $1 ORDER BY "client_orders"."id" ASC LIMIT $2 [["client_id", 3], ["LIMIT", 1]]
D, [2019-01-03T06:28:53.886633 #1] DEBUG -- : ↳ (pry):7
=> false
Так какого черта?Есть ли что-то в erb
, что делает что-то забавное, так что в него входят записи, которых не должно быть, когда он действительно запускается, или что-то еще?Я пытался использовать другие переменные для хранения запроса в случае, если он включает в себя данные из предыдущего запроса или что-то еще, но это не имеет значения.
Итак, да, моя цель - получить объект, который содержит заказы только за последние 30 дней.
БОНУСНЫЕ ТОЧКИ: получите клиентов, у которых нет заказов за последние 30 дней,Это я не совсем уверен, как осуществить.Я думал что-то вроде этого: @clients = Client.where('id NOT IN (SELECT DISTINCT(client_id) FROM client_orders)')