如果包含在哈希

时间:2017-04-15 15:32:48

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

ActiveModelSerializers.config.default_includes = '**'

我们通过序列化程序呈现注释,包括作者和一些信息。

这是使用序列化器,一切都很好

render json: comments

但是,我们还需要发送额外的元数据,因此我们将其包装成哈希。不幸的是,这不是使用序列化器,我们无法弄清楚为什么

render json: {comments: comments, upvoted: upvoted, downvoted: downvoted}

2 个答案:

答案 0 :(得分:1)

您可能想要的是在元数据中包含upvoted和downvoted属性。要将upvoted和downvoted属性包含为元数据,必须使用json或json_api适配器。在你的控制器中有这个:

render json: comments, meta: { upvoted: upvoted, downvoted: downvoted }, adapter: :json

将呈现:

{
  "comments": [
    // your comments...
  ],
  "meta": {
    "upvoted": 4243,
    "downvoted": 123
  }
}

或者您可以为此响应创建一个模型,该模型具有注释以及upvoted和downvoted属性。

答案 1 :(得分:0)

根据git

https://github.com/rails-api/active_model_serializers/issues/2102#issuecomment-293292697

如果我们渲染哈希值而不是集合,则无法自动使用序列化程序。解决方法是

json = Hash.new
json[:comments] = ActiveModel::SerializableResource.new(comments)
json[:upvoted] = upvoted
json[:downvoted] = downvoted
render status: :ok, json: json