dt.*_*dt. 2 json ruby-on-rails
[
{
"id":"123",
"name":"House"
},
{
"id":"1456",
"name":"Desperate Housewives"
},
{
"id":"789",
"name":"Dollhouse"
},
{
"id":"10",
"name":"Full House"
}
]
Run Code Online (Sandbox Code Playgroud)
如何渲染从Ruby中生成这种JSON格式?我拥有来自DB(@result)的所有数据,并且不知道在Ruby中使用什么数据结构,当我这样做时将呈现给它:
respond_to do |format|
format.json { render :json => @result}
end
Run Code Online (Sandbox Code Playgroud)
@result应该是什么数据结构,我如何迭代生成它?谢谢!
如果@result是ActiveRecord模型实例的数组,那么render :json => @result将生成类似于您所使用的内容,但将包含模型的所有属性(render调用to_json您传递它的对象,除非它是一个字符串).
要仅包含id和name属性,可以使用以下:only参数to_json:
respond_to do |format|
format.json { render :json => @result.to_json(:only => [:id, :name] }
end
Run Code Online (Sandbox Code Playgroud)
或者,您可以创建仅包含所需属性的Hash对象数组:
respond_to do |format|
format.json { render :json =>
@result.collect {|o| {:id => o.id, :name => o.name} } }
end
Run Code Online (Sandbox Code Playgroud)
编辑:请参阅下面的@ dt评论.名为text的模型中有一个属性需要作为名称输出.这可以通过在模型中为文本创建别名来完成:
class Model < ActiveRecord::Base
alias_method :name, :text
Run Code Online (Sandbox Code Playgroud)
并包括使用的名称:methods:
respond_to do |format|
format.json { render :json => @result.to_json(:only => :id, :methods => :name }
end
Run Code Online (Sandbox Code Playgroud)
或者,可以使用哈希方法数组重命名属性:
respond_to do |format|
format.json { render :json =>
@result.collect {|o| {:id => o.id, :name => o.text} } }
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |