Ruby 在 Rails 4 - 未调用序列化程序

Ruby On Rails 4 - Serializers not called

我正在使用 Ruby-On-Rails 构建 JSON API 4.

为了序列化我的 JSON 回复,我使用 active_model_serializers 版本 0.9.4。

我有一个继承自 ApplicationController 的 ApiController。我所有的控制器都继承自 ApiController。

这是 ApiController 的样子:

class Api::ApiController < ApplicationController
  include ActionController::Serialization
  private

    def respond_with_json(payload)
      render json: payload, root: false, status: 200
    end
end

我使用 rails g serializer friendship 创建了一个与友谊模型关联的 FriendshipSerializer。这生成了以下文件:

class FriendshipSerializer < ActiveModel::Serializer
  attributes :id, :image
end

这里是 friendships#index 控制器动作的代码:

def index
  friendships = current_user.friendships.order(created_at: "DESC")
  respond_with_json(friendships)
end

我目前遇到的问题是在调用 friendships#index 控制器操作时,它 return 是一个包含所有友谊模型数据的 JSON 数组,而它应该 return 只有 id(根据 FriendshipSerializer)。

我注意到您的问题中存在一些拼写不一致的地方。您确定模型和序列化程序的 class 名称匹配吗?例如,如果你的模型 class 被命名为 "Friendship," AMS 将寻找一个名为 "FriendshipSerializer." 的序列化器 如果 AMS 没有找到那个序列化器,我相信它仍然会独立于一个序列化器;所以如果你有一个 "Friendship" 模型和 "FrienshipSerializer"(反之亦然),那可能就是问题所在。

因为它在序列化程序 explicitly specified 时有效,我怀疑这是一个已知问题(序列化程序的自动加载在某些情况下不起作用,这可能是也可能不是错误,因为这可能是由干扰引起的来自其他宝石)。如果你能忍受这个(或找到解决方法),你可以继续使用 0.9(更多 "battle-tested"),否则尝试使用当前版本 0.10。请注意,这些版本之间存在一些重大变化。