Как правильно использовать has_many для построения иерархии в json? - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу отобразить json как иерархическую модель, но что-то я делаю не так ...

Кто может объяснить, что я сделал не так?

У меня есть следующие "Сериализаторы":

class ManagementSerializer < ActiveModel::Serializer
  attributes :managmentstructure_id, :users_id, :full_name, :users_id_parent, :managements

  def managements
    object.managments.map do |managment|
      ManagementSerializer.new(management, root: false)
    end
  end
end

и "Контроллер":

def index
  @managments = Managment.all

  render json: @managments
end

Что я получаю:

1

{
    "managmentstructure_id": 1,
    "users_id": 32,
    "full_name": "Test",
    "users_id_parent": null
    "managments": [
      {
        "managmentstructure_id": 2,
        "users_id": 43,
        "full_name": "Test2",
        "users_id_parent": 32
        "managments": [
          {
            "managmentstructure_id": 3,
            "users_id": 58,
            "full_name": "Test3",
            "users_id_parent": 43
          }
        ]
      }
    ]
},

2

{
  "managmentstructure_id": 2,
  "users_id": 43,
  "full_name": "Test2",
  "users_id_parent": 32
  "managments": [
          {
            "managmentstructure_id": 3,
            "users_id": 58,
            "full_name": "Test3",
            "users_id_parent": 43
          }
   ]
 },
{
  "managmentstructure_id": 3,
  "users_id": 58,
  "full_name": "Test3",
  "users_id_parent": 43
  "managments": []
 }

моя модель:

class Managment < ActiveRecord::Base
  self.table_name = 'PROJECT.V_L_MANAGMENTSTRUCTURES'
  self.primary_key = 'users_id'

  has_many :managments, class_name: 'Managment',
  foreign_key: "users_id_parent"
  belongs_to :managment, class_name: 'Managment'
end

Или это невозможно сделать с помощью "Сериализаторов"?

1 Ответ

0 голосов
/ 11 сентября 2018

Судя по всему, я бы так и сохранил.

class ManagementSerializer < ActiveModel::Serializer
  has_many :managements
  attributes :managmentstructure_id, :users_id, :full_name, :users_id_parent, managements

  def managements
    object.managments.map do |managment|
      ManagementSerializer.new(management, root: false).serializable_hash        
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...