我试图发送看起来像这样的前端应用程序json:
{
facilities: [
{id: 5, name: 'happy days ranch', location: { address: '1424 Pastoral Lane', zipcode: '25245'}, instructor_ids: [2, 4, 9]}
],
instructors: [
{id: 4, name: 'Johnny Pheonix', skill: '8', picture: 'aws_url', facility_ids: [5, 8, 12}
]
}
render :json => @facilities
序列化程序发现了这一点。好极了!但这并不包括任何讲师
render :json => {facilities: @facilities, instructors: @instructors}
这给了我一个教师数组和一个工具数组,但是没有使用activeModel :: Serializers。
render :json => [@facilities, @instructors]
起初我很兴奋这个,因为它给了我两个数组,它使用了ActiveModel :: Serializers。但是,这就是JSON的样子:
{facilities: [
{facilities: [
#my facilities data
]},
{facilities: [
#my instructor data
]}
]}
提前多多谢谢!
答案 0 :(得分:20)
我通过创建一个名为Search的类来解决它,该类包含ActiveModel
的各个方面class Search
include ActiveModel::Serialization
include ActiveModel::SerializerSupport
attr_accessor :facilities, :instructors
def initialize(facilities, instructors)
@facilities, @instructors = facilities, instructors
end
end
然后我创建了一个搜索控制器(没有什么有趣的)和搜索序列化器。
class SearchSerializer < ActiveModel::Serializer
has_many :instructors, embed: :objects
has_many :facilities, embed: :objects
end
这会创建我想要的json,尽管它现在包含在搜索哈希中:
{search: {
#the stuff I wanted
}}
答案 1 :(得分:7)
这是我的解决方案:
render json: {
facilities: ActiveModel::ArraySerializer.new(@facilities, each_serializer: FacilitySerializer, root: false),
instructors: ActiveModel::ArraySerializer.new(@instructors, each_serializer: InstructorSerializer, root: false)
}
有点脏。它基本上实例化了将被实例化的内容,除了手动完成和两次。两个结果集都使用ActiveModel :: Serializers以正确的格式呈现。