Визуализация: JSON с дополнительными данными - PullRequest
11 голосов
/ 26 февраля 2011

У меня есть модель под названием Todo, и я рендерим это:

format.json { render :json => @todo }

Каждый Todo принадлежит списку. Я хочу добавить значение @todo.list.completion_percentage в JSON, так как мне нужно это для обновления пользовательского интерфейса (запрос AJAX), поэтому JSON выглядит примерно так:

{
  "todo": {
    "created_at": "2011-02-26T19:39:43Z",
    "updated_at": "2011-02-26T19:53:13Z",
    "done": true,
    "text": "Apples",
    "id": 10,
    "list_id": 2,
    "user_id": 1,
    "due_date": null



    // BELOW THIS LINE SHOULD BE IMPLEMENTED
    "list": {
      "completion_percentage": 63
    }
  }
}

Я пробовал разные вещи, но ничего не получалось. Кто-нибудь может мне помочь?

Ответы [ 3 ]

19 голосов
/ 14 июня 2012

Чтобы уточнить ответ Брэндона, попробуйте использовать:

render :json => @todo.attributes.merge({list: { "completion_percentage" => 63 }})
16 голосов
/ 26 февраля 2011

Возможно, вы захотите захватить значение данных JSON, а затем изменить его.

format.json { render :json => JSON::parse(@todo.to_json).merge("list" => { "completion_percentage" => 63 }).to_json }
0 голосов
/ 02 февраля 2017

Точно так же, как знают другие, вызов @ todo.attributes приведет к созданию пользовательских методов для атрибутов. Например, если в вашей модели Todo есть метод

    def written_date
      self.written_date = self.written_date.utc.beginning_of_day
    end 

А атрибут с именем writ_date для модели Todo, вернется только тот атрибут, который хранится в базе данных.

А у вас кроме пользовательского метода возвращаться при вызове @todo.attributes не будет.

...