Создание заголовков / структуры объектов JSON в Rails - PullRequest
0 голосов
/ 31 октября 2018

У меня есть следующий метод в моем приложении Rails, который работает очень хорошо. По сути, я беру кучу объектов (event, captable и shareholders) и просто объединяю их в один объект @snapshot, а затем преобразовываю этот to_json и помещаю его в базу данных.

def save_captable_snapshot(transaction)

    @transaction = transaction
    @event = @transaction.event 
    @captable = @transaction.captable
    @shareholders = @captable.company.shareholders

    @snapshot = []
    @snapshot.push(@captable, @event, @shareholders)

    @event.update_attribute(:snapshot, @event.snapshot = @snapshot.to_json)  

  end

Если я выкладываю @ event.snapshot в представление, я получаю следующий JSON.

[
   {
      "id":27,
      "total_stocks_in_company":"100.0",
      "version":1,
      "name":"cap table ",
      "company_id":20,
      "created_at":"2018-10-25T18:35:13.413Z",
      "updated_at":"2018-10-25T18:35:54.431Z"
   },
   {
      "status_locked":null,
      "id":45,
      "price_per_share":"100.0",
      "total_company_stocks_after_event":"100.0",
      "name":"funding",
      "date":"2018-10-25",
      "currency":"",
      "valuation":"10000.0",
      "created_at":"2018-10-25T18:35:19.273Z",
      "updated_at":"2018-10-25T18:35:54.447Z",
      "captable_id":27,
      "company_id":20,
      "snapshot":null
   },
   [
      {
         "id":0,
         "shareholder":"Bob",
         "name":"Bob",
         "number_of_stocks":null,
         "company_id":20,
         "created_at":"2018-10-25T18:33:20.770Z",
         "updated_at":"2018-10-25T18:33:20.770Z",
         "ownership_percentage":null,
         "email":"",
         "telephone":""
      },
      {
         "id":48,
         "shareholder":"Peter",
         "name":"Peter",
         "number_of_stocks":"100.0",
         "company_id":20,
         "created_at":"2018-10-25T18:33:33.109Z",
         "updated_at":"2018-10-25T18:35:54.437Z",
         "ownership_percentage":"1.0",
         "email":"",
         "telephone":""
      },
      {
         "id":49,
         "shareholder":"BobJane",
         "name":"BobJane",
         "number_of_stocks":null,
         "company_id":20,
         "created_at":"2018-10-25T18:33:45.695Z",
         "updated_at":"2018-10-25T18:33:45.695Z",
         "ownership_percentage":null,
         "email":"",
         "telephone":""
      }
   ]
]

Как видите, форматирование объекта отсутствует, поэтому работать с ним сложно. Я хотел бы добиться чего-то вроде следующего (псевдокод).

{
   "captable":{
      "id":2,
      "name":"A Great Captable"
   },
   "event":{
      "id":24,
      "name":25,
      "number of stocks":3040
   },
   "shareholders":[
      {
         "id":345,
         "name":"Bob",
         "ownership percentage":0.45
      },
      {
         "id":345,
         "name":"Bob",
         "ownership percentage":0.45
      },
      {
         "id":345,
         "name":"Bob",
         "ownership percentage":0.45
      }
   ]
}

Я пробовал кучу разных вещей, но не могу успешно вставить 3 "заголовка" в объект JSON - 3 заголовка или раздела: captable, event, а затем каждый shareholder.

Как лучше всего настроить пустой объект, а затем вставить 3 объекта в объект, прежде чем сохранить его в базе данных? Любые советы будут высоко ценится! :)

1 Ответ

0 голосов
/ 31 октября 2018

Использовать хеш вместо Array:

@snapshot = {
    captable: @captable,
    evet: @event, 
    shareholders: @shareholders
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...