【问题标题】:Rails ActiveModelSerializers - Serializer Not Working When Rendering All CRUDRails ActiveModelSerializers - 渲染所有 CRUD 时序列化程序不工作
【发布时间】:2018-02-19 01:26:20
【问题描述】:

在创建或更新时,我通常这样编写控制器:

def update
    if current_user.update(user_params)
        render status: 200, json: {
            message: "Successfully updated user.",
            user: current_user
        }.to_json
    else
        render status: 422, json: {
            errors: current_user.errors
        }
    end
end

您可以看到,我想将自定义消息与我的用户对象一起传递。但是当我这样做时,它不使用 UserSerializer ......我尝试使用 This:

render status: 200, json: {
    message: "Successfully updated user.",
    user: ActiveModel::Serializer::UserSerializer.new(user)
}.to_json

这行得通...但是如果有一个对象为空,就会导致问题...它会导致 Rails 错误。

有没有更好的方法来处理这个问题,而不必花费大量时间重写我的几十个创建/更新控制器?

具体来说,我希望返回如下所示的 JSON:

{
    "message": "Successfully updated user.",
    "user": {
        ...
    }
}

【问题讨论】:

  • 你使用什么版本的序列化器?
  • 0.10 是我正在使用的版本。

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


【解决方案1】:

测试版active_model_serializers (0.10.6) 一切正常 很好,包括自定义消息和用户序列化程序。

    render status: 200, json: {
        message: "Successfully updated user.",
        menu: UserSerializer.new(user)
    }.to_json

【讨论】:

  • 感谢您的回复,但我真的需要像这样的顶级对象: { "user": { ... }, "message": "Hello" } 这样就摆脱了它。我们现有的应用程序都遵循这种格式来提取 JSON API,我们现在不能回去了。这是 0.9.x 中的方式,我们需要它保持一致。
  • 这个范围工作 .0.10 也可以scope: {user: {message: "Successfully updated user."}}
  • 抱歉,这不是我想要的。我已经更新了我的问题,这可能有助于更好地解释它。感谢您的帮助!
  • @ErickMaynard 更新帖子,确保你的文件名类名正确!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多