Ruby on rails 活动模型序列化程序:高效查询的并行集合?

Ruby on rails 活动模型序列化程序:高效查询的并行集合?,ruby-on-rails,serialization,active-model-serializers,Ruby On Rails,Serialization,Active Model Serializers,假设我有几个模型:User、Place和Review。审查基本上是用户和地点之间的交叉点,属于每个人 我们将返回几个不同的端点,这些端点以地点集合为中心,并附上评论 为了与返回带有附加评论的位置的其他端点保持一致,我尝试创建最新创建的评论的提要,如下所示: [ place: 'Pizza Pie', review: 'latest review!', place: 'Snuffleupagus' Shack', review: 'second latest review'

假设我有几个模型:
User
Place
Review
审查
基本上是
用户
地点
之间的交叉点,
属于每个人

我们将返回几个不同的端点,这些端点以地点集合为中心,并附上评论

为了与返回带有附加评论的位置的其他端点保持一致,我尝试创建最新创建的评论的提要,如下所示:

[
  place: 'Pizza Pie',
    review: 'latest review!',
  place: 'Snuffleupagus' Shack',
    review: 'second latest review',
  etc. etc.
]
这是我的控制器操作(
expose
来自;它自动调用
serializable_hash
):

def提要
review\u id=review.order(“更新的描述”).pull(:id)
expose Place.joins(:reviews).where(reviews:{id:review_id}).order(“reviews.updated_at DESC”),每个_序列化程序:PlaceFeedSerializer
终止
它将返回位置数组,并通过以下
PlaceFeedSerializer
对每个位置进行序列化:

class PlaceFeedSerializer
为了实现这一点,我先进行两次ActiveRecord查询,然后对每个序列化的评论进行一次新的查询。它看起来有点粗糙,而且很慢

在控制器中,是否有方法传入两个并行序列化的数组?或者,我可以创建一个
ActiveModel::ArraySerializer
,它可以在适当的
位置
查看
数组吗

或者我是在重载
ActiveModel::Serializer
的简单性,而使用像JBuilder这样的东西会更好

如果可能的话,也许另一种选择是将每个评论序列化,并“包装”在其关联的位置


提前谢谢

>P> >主题,但您可能需要考虑使用<代码>:包含而不是<代码>:加入< <代码>,以您的<代码>复习> <代码>信息,快速加载您的<代码>位置< /代码>信息。相关铁路公司。

我想出了一种相当老套的方法,但似乎奏效了

使用
每个_serializer:PlaceFeedSerializer
,从控制器传入一系列评论,看起来如下所示:

class PlaceFeedSerializer < ActiveModel::Serializer
  delegate :current_resource_owner, to: :scope

  def initialize(*args)
    super
    @place = object.place
  end

  # Re-created association (need to manually attach in 'attributes')
  def review
    ReviewSerializer.new(object, @options)
  end

  # NOTE: This retrieves ONLY the attributes from PlaceSerializer
  #       so we need to create the associations manually (not DRY!)
  def attributes
    hash = PlaceSerializer.new(@place, @options).attributes
    hash[:review] = review
    hash
  end
end
class PlaceFeedSerializer
如果有人有其他想法,请随意贡献!谢谢