В моем проекте 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')
Как я могу решить эту проблему?