Хобрук: Ваш путь к мастерству в программировании

Поиск столбца jsonb по массиву значений

В моем проекте Ruby on Rails у меня есть модель SurveyResult со следующей областью действия:

class SurveyResult < ActiveRecord::Base
  scope :with_purpose, -> (purpose) {
    where("raw #>> '{survey, purpose}' = ?", purpose)
  }
end

raw — столбец jsonb. Данные в этом столбце представлены следующей схемой:

survey: { purpose: 'data' }

Эта область отлично работает, если я пытаюсь получить результаты опроса, целью которого является data:

SurveyResult.with_purpose('data')

но когда я также хочу найти некоторые результаты опроса с другой целью:

SurveyResult.with_purpose(['data', 'risk'])

он возвращает следующую ошибку:

2.3.1 :042 > SurveyResult.with_purpose(['risk', 'data'])
  SurveyResult Load [dev] (1.5ms)  SELECT "survey_results".* FROM "survey_results" WHERE (raw #>> '{survey, purpose}' = 'risk','data')
ActiveRecord::StatementInvalid: PG::DatatypeMismatch: ERROR:  argument of WHERE must be type boolean, not type record
LINE 1: ...CT "survey_results".* FROM "survey_results" WHERE (raw #>> '...
                                                             ^
: SELECT "survey_results".* FROM "survey_results" WHERE (raw #>> '{survey, purpose}' = 'risk','data')

Как я могу решить эту проблему?


Новые материалы

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

React Hooks: основы деструктуризации массива
Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

Пакеты R, используемые в Tesla
Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

Сокращение и слияние токенов для эффективных моделей VL: обзор
Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..