开发者

Render :json with extra data

I have a model called Todo and I render this:

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

Each Todo belongs_to a List. I want to a开发者_运维技巧dd the value of @todo.list.completion_percentage to the JSON as I need this to update the UI (AJAX request), so the JSON looks something like this:

{
  "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
    }
  }
}

I have tried various things but none worked. Can anyone help me?


To refine Brandon's answer, try using:

render :json => @todo.attributes.merge({list: { "completion_percentage" => 63 }})


You may want to capture the value of the JSON data, and then modify it.

format.json { render :json => JSON::parse(@todo.to_json).merge("list" => { "completion_percentage" => 63 }).to_json }


Just so others are aware, calling @todo.attributes will pull off custom methods on attributes. E.g., if you have in your Todo model a method

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

And an attribute called written_date on the Todo Model, only the attribute will come back that is stored in the database.

And you expect the custom method to come back when you call @todo.attributes, it will not.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜