Как использовать ActiveModel::Serializer со столбцом PostgreSQL JSON

Я пытаюсь использовать ActiveModel::Serializer в сочетании с базой данных PostgreSQL.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я включаю столбец типа json в сериализатор, я получаю:

SystemStackError (stack level too deep):
  actionpack (4.0.0) lib/action_dispatch/middleware/reloader.rb:70

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

От schema.rb:

create_table "jobs", force: true do |t|
    t.integer  "user_id"
    t.string   "tool"
    t.string   "name"
    t.json     "options"
    t.integer  "status"
    t.string   "version"
    t.datetime "created_at"
    t.datetime "updated_at"
end

job_serializer.rb:

class JobSerializer < ApplicationSerializer
    attributes :id, :tool, :name, :status, :options, :version, :created_at

    has_many :inputs, serializer: FileLinkSerializer
end

Работает нормально, если я удаляю :options из атрибутов, но вылетает, когда он включен, как указано выше.


person Baruch    schedule 15.09.2014    source источник
comment
Мне просто интересно, как сериализаторы могут вести себя со столбцом json, сделал быстрый поиск, и вот оно :) Спасибо.   -  person jedi    schedule 16.07.2019


Ответы (1)


Проблема в наличии поля с именем options. Я обернул это поле в поле с именем tool_options, и все заработало нормально.

class JobSerializer < ApplicationSerializer
  attributes :id, :tool, :name, :status, :tool_options, :version, :created_at
end

class Job < ActiveRecord::Base
  def tool_options
    options
  end
end

(На самом деле я изменю свою схему, так как еще не поздно.)

person Baruch    schedule 16.09.2014
comment
Только что столкнулся с той же проблемой в active_model_serializers 0.8. Этого не происходит в версии 0.9, так как функция конфликтующих параметров, похоже, была удалена. - person Hugh; 12.01.2015