2014-01-23 3 views
1

Ember-данных, кажется, хочет массив данных для гипотетической модели цвета выглядеть следующим образом:Подготовка Rails JSON для Ember данные

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

т.е. он хочет корневой элемент, множественное число от любого типа модели является. Мне интересно, как получить рельсы для отправки JSON таким образом, используя драгоценный камень active_model_serializers. Вот что у меня есть:

# 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 Data ('ActiveModelAdapter' /' ActiveModelSerializer'), которые специально предназначены для рельсов backend 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 

который отключенный корневой элемент в-объект сохраняя при этом корневой элемент массива.

Смежные вопросы