【问题标题】:How do you output JSON from Ruby on Rails?如何从 Ruby on Rails 输出 JSON?
【发布时间】:2011-06-19 20:30:35
【问题描述】:

我希望有一个通过 AJAX 创建/更新的模型。你如何在 Ruby on Rails 中做到这一点?

另外,更具体地说:如何在 RoR 中输出 JSON?

def create
  response = {:success => false}
  @source = Source.new(params[:source])
  if @source.save
    response.success = true
  end
  render :json => response.to_json
end

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    你需要做的就是用一个对象调用 render :json,像这样:

    render :json => my_object
    

    对于大多数对象,这将起作用。如果它是一个 ActiveRecord 对象,请务必查看 as_json 以了解它是如何工作的。对于上面说明的情况,您的哈希将转换为 json 并返回。

    但是,您确实有一个错误:您无法通过 response.success 访问成功密钥——您应该改为 response[:success]

    【讨论】:

      【解决方案2】:

      jimothy 的解决方案非常好,但我认为从长远来看它是不可扩展的。 Rails 旨在成为一个模型、视图和控制器框架。现在 JSON 在默认 rails 的视图中被欺骗了。然而,有一个很棒的项目叫做 RABL,它允许 JSON 视图。我已经写了一些论据,说明为什么我认为这是一个不错的选择,以及如何快速启动和运行它。看看这对你是否有用:http://blog.dcxn.com/2011/06/22/rails-json-templates-through-rabl/

      【讨论】:

      • 在 RABL 上+1。我一直在我的第一个真正的 RoR 项目(一个 API 服务)中使用它,并且效果很好。到目前为止唯一的问题是与序列化日期时间对象有关,并且已在 RABL github 自述文件中添加了一个变通解决方案。
      • 是的!对于可扩展的应用程序来说,它更有意义。
      【解决方案3】:
      @source = Source.new(params[:source])
      
      respond_to do | f |
        f.html {
          # do stuff to populate your html view
          # maybe nothing at all because @source is set
        }
      
        f.any(:xml, :json) { 
          render request.format.to_sym => @source 
        }
      end
      

      【讨论】:

        猜你喜欢
        • 2015-05-05
        • 1970-01-01
        • 1970-01-01
        • 2010-09-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多