Похоже, что StoreModel gem не поддерживает массивы - PullRequest
1 голос
/ 28 апреля 2019

Я пытаюсь использовать гем StoreModel для поддержки моих данных jsonb с помощью классов.При попытке определить атрибут массива я получаю ArgumentError (неизвестное ключевое слово: массив).Например:

class A
   include StoreModel::Model

   attribute :my_array, :integer, array:true, default:Array.new
end

Если вы введете это значение в irb, вы получите ошибку.

При дальнейшей проверке, похоже, она не имеет отношения к гему StoreModel.

class A
  include ActiveModel::Model
  include ActiveModel::Attributes

   attribute :my_array, :integer, array:true, default:Array.new
end

даст тот же результат.Согласно API Атрибутов класс не должен быть поддержан таблицей базы данных.Однако, когда я пробую пример:

class MyModel < ActiveRecord::Base
  attribute :my_string, :string
  attribute :my_int_array, :integer, array: true
  attribute :my_float_range, :float, range: true
end

model = MyModel.new(
  my_string: "string",
  my_int_array: ["1", "2", "3"],
  my_float_range: "[1,3.5]",
)

в IRB, он пытается выполнить SQL-запрос, и поэтому я получаю:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR:  relation "my_models" does not exist)
LINE 8:                WHERE a.attrelid = '"my_models"'::regclass
                                          ^
:               SELECT a.attname, format_type(a.atttypid, a.atttypmod),
                     pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod,
                     c.collname, col_description(a.attrelid, a.attnum) AS comment
                FROM pg_attribute a
                LEFT JOIN pg_attrdef d ON a.attrelid = d.adrelid AND a.attnum = d.adnum
                LEFT JOIN pg_type t ON a.atttypid = t.oid
                LEFT JOIN pg_collation c ON a.attcollation = c.oid AND a.attcollation <> t.typcollation
               WHERE a.attrelid = '"my_models"'::regclass
                 AND a.attnum > 0 AND NOT a.attisdropped
               ORDER BY a.attnum
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...