Я использую тип данных jsonb
для столбца с именем data
. Когда я запрашиваю простой хеш, он работает правильно:
[1] pry(PredictionService)> Prediction.where(data: {"innings_no" => 1})
Prediction Load (1.2ms) SELECT "predictions".* FROM "predictions" WHERE "data"."innings_no" = 1
=> #<Prediction::ActiveRecord_Relation:0x3fcb34634e78>
Когда я использую такой массив, это не срабатывает с неправильным SQL:
[2] pry(PredictionService)> Prediction.where(data: {"innings_no" => [1,2]})
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "data" does not exist
LINE 5: WHERE a.attrelid = '"data"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"data"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
from /Users/lenin.rajasekaran/.rvm/gems/ruby-2.3.1@duggout-app/gems/activerecord-4.2.5/lib/active_record/connection_adapters/postgresql_adapter.rb:592:in `async_exec'
Это известная проблема с jsonb / ActiveRecord или ее можно исправить?
Я не могу использовать функции массива Postgres для доступа к определенному ключу, поскольку ключи являются динамическими, и я использую этот запрос для поиска существующих записей перед созданием новой.
Prediction.where(data: {"innings_no" => 1}).to_a
, и это дало мне ожидаемые результаты? - person mu is too short   schedule 03.10.2016data
- это имя таблицы, аinnings_no
- столбец в этой таблице. Я думал, что это работает, потому что увидел верный#<Prediction::ActiveRecord_Relation:0x3fcb34634e78>
результат - person Lenin Raj Rajasekaran   schedule 03.10.2016data
? Это массив JSON, объект или что-то еще? - person mu is too short   schedule 03.10.2016Hash
объект. ActiveRecord принимаетHash
в качестве столбцаdata
в методеcreate
. Но не принимает то же самое при использовании в предложенииwhere
. - person Lenin Raj Rajasekaran   schedule 04.10.2016