【问题标题】:Rails ActiveModelSerializer, combine two lists of same-type-models into one serialized response, with different namesRails ActiveModelSerializer,将两个相同类型的模型列表组合成一个序列化响应,具有不同的名称
【发布时间】:2018-06-14 18:03:23
【问题描述】:

我有一个 rails api,我在其中使用 Active Model Serializers(版本 0.10.6)来序列化 json 响应。

我有两个数组,它们都是端点中的“FeatureRequest”类型,返回用户发出的请求列表,以及用户被标记的第二个请求列表。理想情况下,我想序列化响应看起来像这样:

{
    "my_requests" : {
        ...each serialized request...
    },
    "tagged_requests" : {
        ...each serialized request, using the same serializer"
    }
}

有没有办法做到这一点?

这是我的相关控制器方法:

  def index_for_user
    user = User.includes(leagues: :feature_requests).find(params[:user_id])
    # Find all requests that this user created
    @users_created_feature_requests = FeatureRequest.requests_for_user(user.id)
    @feature_requests_in_tagged_leagues = []
    user.leagues.each do |league|
      @feature_requests_in_tagged_leagues << league.feature_requests
    end
    ...some serialized response here
  end

在这段代码中,两个列表是@users_created_feature_requests 和@feature_requests_in_tagged_leagues

谢谢!

【问题讨论】:

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


    【解决方案1】:

    假设您有一个像FeatureRequestSerializer 这样的序列化程序,您可以通过以下方式实现:

    def index_for_user
      user = ...
      users_created_feature_requests = ...
      feature_requests_in_tagged_leagues = user.leagues.map(&:feature_requests)
    
      # serialized response
      render json: {
        my_requests: serialized_resource(users_created_feature_requests)
        tagged_requests: serialized_resource(feature_requests_in_tagged_leagues)
      }
    end
    
    private
    
    def serialized_resource(collection, adapter = :attributes)
      ActiveModelSerializers::SerializableResource.new(collection,
        each_serializer: FeatureRequestSerializer,
        adapter: adapter
      ).as_json
    end
    

    【讨论】:

      猜你喜欢
      • 2021-01-19
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 1970-01-01
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-05-14
      相关资源
      最近更新 更多