渲染:json有额外的数据

时间:2011-02-26 19:55:37

标签: ruby-on-rails json render

我有一个名为Todo的模型,我渲染了这个:

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

每个Todo属于一个列表。我想将@todo.list.completion_percentage的值添加到JSON,因为我需要这个来更新UI(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 个答案:

答案 0 :(得分:19)

要改进Brandon的答案,请尝试使用:

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

答案 1 :(得分:16)

您可能希望捕获JSON数据的值,然后对其进行修改。

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

答案 2 :(得分:0)

正如其他人所知,调用@ todo.attributes会拉动属性上的自定义方法。例如,如果您的Todo模型中有方法

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

在Todo Model上有一个名为written_date的属性,只有属性会返回存储在数据库中的属性。

除了在致电@todo.attributes时回来的自定义方法,你不会。