У меня есть следующий метод в моем приложении 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 объекта в объект, прежде чем сохранить его в базе данных? Любые советы будут высоко ценится! :)