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
如果有人有其他想法,请随意贡献!谢谢