ruby кратно оператору где с столбцом jsonb и столбцами без jsonb - PullRequest
1 голос
/ 15 января 2020

Я пытаюсь создать запрос, включающий столбец jsonb и 2 столбца, отличных от jsonb.

Несколько попыток объединить их не увенчались успехом, но 1 почти сработала, когда я использовал только 1 другой столбец, не относящийся к jsonb. У меня есть модель канала с хранилищем опций и несколькими атрибутами.

Если я разделяю запросы, они работают нормально, но в совокупности они получают пустой массив. Я позаботился о том, чтобы, если запросы действительно работали, для них наверняка есть данные, которые нужно вернуть.

Не столбцы jsonb - работает

Channel.where("platform_id = ? AND updated_at < ?",2,7.days.ago)

столбец jsonb - работает

Channel.where("options @> ?", {valid_account: true}.to_json)

в сочетании, где оператор - возвращает пустое []

Channel.where("platform_id = ? AND updated_at < ?",2,7.days.ago).where("options @> ?", {valid_account: true}.to_json)

1, где оператор с комбинированным запросом - снова возвращает пустое []

Channel.where("options = ? AND platform_id = ? AND updated_at < ?", {"valid_account" => true}.to_json, 2, 7.days.ago)

Я сейчас в растерянности и не уверен, как получить все это в одном запросе ... или если это вообще возможно.

Опять же ... определенно есть каналы, которые должны возвращаться с указанными выше запросами

TIA

ОБНОВЛЕНИЕ

Удалось получить запрос работать. попробовал почти каждую комбинацию, но пропустил одну критическую.

Channel.where("options @> ? AND platform_id = ? AND updated_at > ?", {valid_account: true}.to_json, 2, 7.days.ago)

это сработало. По какой-то причине я использовал '> @' в отдельном методе, но не комбинировал его для этого. Все работает сейчас. Спасибо за поддержку

1 Ответ

0 голосов
/ 03 февраля 2020

Ответом было включение «> @» в запрос для столбца jsonb

Channel.where("options @> ? AND platform_id = ? AND updated_at > ?", {valid_account: true}.to_json, 2, 7.days.ago
...