渲染:json有额外的数据
我有一个名为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 } } }
我尝试了各种各样的东西但没有效果。 谁能帮我?
您可能希望捕获JSON数据的值,然后进行修改。
format.json { render :json => JSON::parse(@todo.to_json).merge("list" => { "completion_percentage" => 63 }).to_json }
要改进Brandon的答案,请尝试使用:
render :json => @todo.attributes.merge({list: { "completion_percentage" => 63 }})
正如其他人所知,调用@ todo.attributes会拉动属性上的自定义方法。 例如,如果你的Todo模型中有一个方法
def written_date self.written_date = self.written_date.utc.beginning_of_day end
在Todo Model上有一个名为written_date的属性,只有属性会返回存储在数据库中的属性。
除了调用@todo.attributes
后返回的自定义方法,你不会。