堆栈级别太深,Rails API和active_model_serializer中的belongs_to / has_many关系

时间:2015-05-21 13:52:26

标签: ruby-on-rails active-model-serializers grape-api

我在两个模型,集合和作品之间建立了简单的关系。一个集合有很多作品,一件作品属于一个集合。

收集序列化程序:

#collection_serializer.rb

class CollectionSerializer < ActiveModel::Serializer
  self.root = true

  attributes :id, :title

  has_many :works, embed: :ids, embed_in_root: true, key: :works
  has_one  :user, embed: :id, key: :user
end

工作序列化程序

#work_serializer.rb

class WorkSerializer < ActiveModel::Serializer
  attributes :id, :title, :min_year, :max_year, :longitude, :latitude, :circa, :place, :created_at, :updated_at

  has_one   :collection, embed: :id, embed_in_root: false
end

当我调用集合时,我从我的应用程序(Ember)调用集合,我得到SystemStackError - 堆栈级别太深。这是Grape中用来调用集合的控制器:

module API
  module V1
    class Collections < Grape::API
      include API::V1::Defaults

      resource :collections do
        desc "Return a collection"
        params do
          requires :id, type: String, desc: "ID of the collection"
        end
        get ":id", root: "collection" do
          Collection.where(id: permitted_params[:id]).first!
        end
      end
    end
  end
end

这似乎很简单,但我可以弄清楚这个错误。谢谢!

1 个答案:

答案 0 :(得分:0)

我建议您为preg_replace("/<br.*?\/>/", "<br />", $the_string); 创建一个新的序列化程序,但不包括Work

然后在你的工作序列化器中:

collection