【问题标题】:Active Model Serializer not responding with the correct attributesActive Model Serializer 没有以正确的属性响应
【发布时间】:2016-12-08 15:01:21
【问题描述】:

我正在处理一个rails-api 项目,我正在使用active model serialiazer。但不幸的是,它没有按预期工作。这是我的V1::HuntsController

class V1::HuntsController < V1::MainController
  def index
    render json: Hunt.all
  end
end

我的狩猎序列化器看起来像这样

class HuntSerializer < ActiveModel::Serializer
  belongs_to :user
  attributes :id,:title,:picture_url,:clue
  private
  def picture_url
    object.picture.url
  end
end

但是在我的response 中,我从hunt 获得了所有属性。我尝试显式定义序列化程序以避免版本控制问题。

render json: {data: Hunt.all } ,each_serializer: HuntSerializer

但似乎没有任何效果。在我可以看到的日志中,

[active_model_serializers] Rendered V1::HuntSerializer with Hash (32.36ms)

这里发生了什么。任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    试试 render json: Hunt.all, each_serializer: HuntSerializer(不需要数据根)

    然后为了验证序列化程序是否被命中,将byebug 放入picture_url 函数的主体中。如果byebug 被击中,您确实在使用您的序列化程序。 (必须在 gemfile 中包含 gem byebug)

    【讨论】:

    • 正如我在问题中明确提到的那样,我尝试了您提到的建议,但没有成功。我也试过debugger,但它没有被调用。所以不确定这里发生了什么。
    • 对不起,我明白你的意思。我试过了,它的工作原理。为什么 `` {data: Hunt.all }`` 不工作?不是调用as_json方法吗?
    • 它不起作用,因为您是 1.) 阻止 AMS 检查对象并检索相应的序列化器 (HuntSerializer) 和 2.) 即使使用 each_serializer 它也不起作用,因为 { data: Hunt.all } 不是一个数组。
    • 另外,debugger 不会在服务器端工作,因为那是一个 javascript 概念。 byebugpry 通常用于服务器端的调试。最后,如果这为您解决了问题,请接受我的回答:)
    • 我已接受您的回答。顺便说一句,rails 中也存在调试器,实际上 ruby​​ gem 包含在 rails 中。所以你可以在 Rails 中使用调试器。
    猜你喜欢
    • 1970-01-01
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多