2014-01-23 33 views
1

灰烬数据似乎希望数据的假想色模型数组看起来像:准备Rails的JSON的灰烬数据

{ 
    "colors": [{ 
    name: "red" 
    }, { 
    name: "blue" 
    }, { 
    name: "green" 
    }] 
} 

即它想要一个根元素是任何类型的模型复数是。我想知道如何让rails使用active_model_serializers gem来发送JSON。以下是我有:

# GET /colors 
# GET /colors.json 
def index 
    @colors = Color.all 

    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render :json => @colors, :root => 'colors' } 
    end 
end 

但是这产生:

{ 
    colors: [ 
    { 
     colors: { 
     name: "red" 
     } 
    }, { 
     colors: { 
     name: "blue" 
     } 
    }, { 
     colors: { 
     name: "green" 
     } 
    } 
    }] 
} 

即有阵列每个对象上的根元素。我只需要在阵列上。任何帮助表示赞赏。谢谢!

+0

我不是一个铁杆人,但我知道有一个Ember数据适配器/序列化器('ActiveModelAdapter' /'ActiveModelSerializer'),这是专门为rails后端api。你在使用它们吗? – Kingpin2k

+0

我相信你已经浏览了这个页面,https://github.com/rails-api/active_model_serializers – Kingpin2k

回答

1

我最终加入我自己的自定义序列

应用程序/串行器/ color_serializer.rb

class ColorSerializer < ActiveModel::Serializer 
    attributes :name 
    self.root = false 
end 

,然后使用

render json: @colors, each_serializer: ColorSerializer 
其禁用每个对象的根元素

解决了这个同时保留数组上的根元素。