如何构建一个json对象

时间:2011-08-17 16:25:10

标签: ruby-on-rails ruby ruby-on-rails-3 json

现在在我的线程控制器中我有以下

def thread
  @thread = Thread.find(params[:id])
  ....
  render :json => {"success" => 1}, :content_type => 'application/json'
end

我想做的是构建json响应以包含@thread,但只有一些参数,所以它是这样的:

{"success" => 1, "thread" => {"id": 1, "title": "hello world"}

知道如何在rails控制器中构建这个json对象吗?目标是不包括所有线程字段并包括不是线程字段的成功?

由于

3 个答案:

答案 0 :(得分:3)

您应该使用模型的as_json函数。

render :json => {"success" => 1, :thread => @thread.as_json(:only => [:my, :wanted, :attributes]) }

as_json包含大量选项,可帮助您构建准备好JSON编码的哈希,包括onlyexcept,除了列出的内容之外,还包括模型上的所有属性。 methods将添加对象上可用的其他方法,include将关联(belongs_to,has_one,has_many等)添加到哈希中。

有关更多信息示例,请参阅:http://api.rubyonrails.org/classes/ActiveModel/Serializers/JSON.html

上的as_json文档

答案 1 :(得分:1)

怎么样

  render :json => {"success" => 1, "thread" => { "id" => @thread.id, "title" => @thread.title } }, :content_type => 'application/json'

答案 2 :(得分:1)

render :json => {"success" => 1, "thread" => @thread.attributes.select{ |k, v| ["id", "title"].include? k }}