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。请注意,这些版本之间存在一些重大变化。
我正在使用 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。请注意,这些版本之间存在一些重大变化。