[
{
"id":"123",
"name":"House"
},
{
"id":"1456",
"name":"Desperate Housewives"
},
{
"id":"789",
"name":"Dollhouse"
},
{
"id":"10",
"name":"Full House"
}
]
如何在 Ruby 中渲染以生成此 JSON 格式?我拥有来自数据库(@result)的所有数据,但不知道在 Ruby 中使用什么数据结构来呈现此数据:
respond_to do |format|
format.json { render :json => @result}
end
@result 应该是什么数据结构以及如何迭代来生成它?谢谢!
最佳答案
如果@result
是ActiveRecord模型实例的数组,那么render :json => @result
将生成类似于您之后的内容,但将包含所有属性模型的(render
对您传递的对象调用 to_json
,除非它是字符串)。
要仅包含 id 和 name 属性,您可以使用 to_json
的 :only
参数:
respond_to do |format|
format.json { render :json => @result.to_json(:only => [:id, :name] }
end
或者,您可以创建仅包含所需属性的 Hash 对象数组:
respond_to do |format|
format.json { render :json =>
@result.collect {|o| {:id => o.id, :name => o.name} } }
end
编辑:请参阅下面@dt 的评论。模型中有一个名为text的属性需要作为name输出。这可以通过为模型中的文本创建别名来完成:
class Model < ActiveRecord::Base
alias_method :name, :text
并使用 :methods
包含名称:
respond_to do |format|
format.json { render :json => @result.to_json(:only => :id, :methods => :name }
end
或者,可以使用哈希数组方法来重命名属性:
respond_to do |format|
format.json { render :json =>
@result.collect {|o| {:id => o.id, :name => o.text} } }
end
关于ruby-on-rails - Ruby 数据结构呈现某种 JSON 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2663883/