【问题标题】:Active Model Serializers: Rendering array of values only renders first value活动模型序列化器:渲染值数组仅渲染第一个值
【发布时间】:2018-05-17 16:47:43
【问题描述】:

我有一个值数组:[1, 2, 3, 4, 5]

我希望使用json_api 呈现这些。我已经成功地将ActiveModelSerializers::Model 用于其他目的来呈现单个普通的Ruby 对象。但在这种情况下,我有一个对象数组。渲染时,AMS 仅渲染第一个对象。

设置

型号

class Step < ActiveModelSerializers::Model
  attr_accessor :value
end

序列化器

class StepSerializer < ActiveModel::Serializer
  attributes :value
end

控制器

class Api::StepsController < Api::BaseController

  def index
    steps = Option.pluck(:step).uniq.map { |v| Step.new(value: v) }
    render json: steps
  end

end

输出

{
  "data": [{
    "id": "step",
    "type": "step",
    "attributes": {
      "value": 1
    }
  }]
}

我希望渲染所有 5 个模型,但似乎只有第一个模型正在渲染。有什么想法吗?

使用active_model_serializers (0.10.7)

【问题讨论】:

  • 您确定您有 5 个唯一条目吗?在rails console 中运行Option.pluck(:step).uniq 会给你带来什么?
  • 是的,它们是独一无二的。运行 Option.pluck(:step).uniq.map { |v| Step.new(value: v) } 会产生 5 个对象,其值为 1-5。
  • 试试render json: steps, each_serializer: StepSerializer
  • 您找到解决方案了吗?

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


【解决方案1】:

我相信你不再需要这个了,但也许这可以帮助别人。

我遇到了类似的问题:在我的情况下,问题是我正在使用带有 id = nil 的资源。 它只生成一个条目! 一旦我用唯一标识符填充了id,它就会按预期工作。

我意识到读取 json:api 格式 (https://jsonapi.org/format/),因为其中一项要求是:

每个资源对象都必须包含一个 id 成员和一个 type 成员。 id 和 type 成员的值必须是字符串。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2020-11-20
    • 2019-05-14
    相关资源
    最近更新 更多