Цепной запрос ruby ​​on rails возвращает те, которые не равны нулю - PullRequest
1 голос
/ 04 ноября 2019

Я запрашиваю Active Record и хочу связать два запроса вместе.

Моя проблема в том, что когда я хочу вернуть те с атрибутом, который не равен nil, он не возвращает никаких записей, которые, как я знаю, существуют:

user.change_requests.where("action_at = ?", req.action_at).where("cancelled_at != ?", nil)

Это в основном возвращает пустой массив, но я ожидаю массив change_requests

1 Ответ

3 голосов
/ 04 ноября 2019

Макс имел правильный ответ выше в комментариях. Вы можете использовать синтаксис ActiveRecord where.not при записи sql NOT.

Из документов ActiveRecord :

2.4 НЕ условия

NOT SQL-запросы могут быть построены с помощью where.not:

Client.where.not(locked: true)

Другими словами, этот запрос можно сгенерировать, вызвав where без аргумента, затемсразу цепочка с не проходящими там условиями. Это сгенерирует SQL следующим образом:

SELECT * FROM clients WHERE (clients.locked != 1)

Для вашего конкретного случая код будет выглядеть следующим образом:

user.change_requests.where(action_at: req.action_at).where.not(cancelled_at: nil)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...