【问题标题】:Why rails doesn't generate an object type为什么 rails 不生成对象类型
【发布时间】:2013-03-22 00:47:38
【问题描述】:

由于某种原因,我的控制器创建的任何 json 都会生成一个 json 数组,但不会生成一个对象。我想知道它的行为是否正常?如果是我如何获得我正在寻找的东西。

这里是控制器

def index
  @articles = Article.all
  respond_to do |format|
    format.json  { render :json => @events }
  end
end

现在这是我实际得到的

[{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}]

现在我想先看看对象,就像标准的 json 已经遵循了

{ "Article":{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}}

【问题讨论】:

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


    【解决方案1】:

    您应该启用ActiveRecord::Base.include_root_in_json 以获得您想要的全局行为。来自the docs

    include_root_in_json 选项控制顶层行为 as_json。如果为真(默认)as_json 将发出单个根节点 以对象的类型命名。例如:

    user = User.find(1)
    user.as_json
    # => { "user": {"id": 1, "name": "Konata Izumi", "age": 16,
    #               "created_at": "2006/08/01", "awesome": true} }
    
    ActiveRecord::Base.include_root_in_json = false
    
    user.as_json
    # => {"id": 1, "name": "Konata Izumi", "age": 16,
    #     "created_at": "2006/08/01", "awesome": true}
    

    也可以通过将:root 选项设置为false 来实现此行为,如下所示:

    user = User.find(1)
    user.as_json(root: false)
    # =>  {"id": 1, "name": "Konata Izumi", "age": 16,
    #      "created_at": "2006/08/01", "awesome": true}
    

    【讨论】:

      【解决方案2】:

      您可以构建一个 ruby​​ 对象或哈希来反映您想要返回的 json 对象的结构并渲染它。

      def index
        @articles = Article.all
        respond_to do |format|
          format.json  { render :json => @events.map { |e| { Article: e } } }
        end
      end
      

      这会给你类似的东西

      [{ "Article":{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}}]
      

      【讨论】:

      • 像文章一样属于自己的对象可以有cmets怎么办?
      猜你喜欢
      • 2013-03-12
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      相关资源
      最近更新 更多