ActiveModel :: Serializers embed :: ids,include:true不是侧载数据

时间:2015-01-06 19:03:38

标签: ruby-on-rails json ember-data active-model-serializers

我正在运行Rails 4.2 - AMS 0.9应用程序,我(为了说明目的)有3个模型:Foo has_one Bar,has_many Baz es。我只在响应中获取ID,而不是侧载项。是否有配置选项,或者我错过了什么?

我的AMS课程是:

class FooSerializer < ActiveModel::Serializer
   embed :ids, include: true
   has_one :bar, key: :bar    ## For ember-data; it doesn't like "_id"
   has_many :bazes, key: :bazes

   attributes :id, :etc

end

StackOverflow上有很多关于AMS的主题,在发布之前我读了很多,但这让我感到非常难过。

2 个答案:

答案 0 :(得分:2)

经过一系列的实验,我不得不在控制器中调用以下内容:

format.json { render json: ActiveModel::ArraySerializer.new(@foos, each_serializer: FooSerializer), root: :foos }

root: :foos(顺便说一句,甚至不是“真的”有效,序列化程序本身也没有self.root = trueself.root = :foos)是关键位。

答案 1 :(得分:0)

@Ted的答案对我来说适用于数组,但是当我尝试以show方法进行序列化时,我当然不能使用AciveModel::ArraySerializer。在研究为什么为什么Ted的答案有效时,我在AMS文档中碰到了这条小线

  

当控制器不继承自ActionController :: Base时,请手动添加序列化模块

class ApplicationController < ActionController::API
  include ActionController::Serialization
end

链接:https://github.com/rails-api/active_model_serializers/tree/0-9-stable#use-serialization-outside-of-actioncontrollerbase

由于我的rails应用程序仅是api,因此正是我所需要的。