ruby-on-rails - Ruby 数据结构呈现某种 JSON 格式

标签 ruby-on-rails json

[
   {
      "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/

相关文章:

php - Symfony和doctrine从sql数据库查询中获取空响应

ruby-on-rails - nginx 既是反向代理又是 web 服务器

javascript - 如何从 Rails 应用程序中的 assets/images 文件夹中获取图像

ruby-on-rails - Ctrl+C 后 Sidekiq 不会关闭

java - 通过调用AJAX获取JSON实例到jsp

asp.net - .Net AJAX 中是否有内置方式将对象手动序列化为 JSON 字符串?

ruby-on-rails - Ruby on Rails - Has_many 通过连接表属性限制和排序

ruby-on-rails - Rails 在 ajax 响应中发送错误的内容类型

jquery - 从 jQuery 调用 WCF 服务库时出现问题

javascript - (ES6) 从 JSON 到 HTML 的数据(div)