Ruby on rails 活动模型序列化程序不使用rails api gem
我在json api的项目中使用了rails api gem,为此,我使用了活动模型序列化器gem来序列化我的对象,但有些情况下,这些对象没有使用活动模型序列化器进行序列化 我的serializers文件夹中有一个MessageSerializerRuby on rails 活动模型序列化程序不使用rails api gem,ruby-on-rails,active-model-serializers,rails-api,Ruby On Rails,Active Model Serializers,Rails Api,我在json api的项目中使用了rails api gem,为此,我使用了活动模型序列化器gem来序列化我的对象,但有些情况下,这些对象没有使用活动模型序列化器进行序列化 我的serializers文件夹中有一个MessageSerializer class MessageSerializer < ActiveModel::Serializer attributes :id, :sender_id, :recipient_id, :sender_type, :subj, :body,
class MessageSerializer < ActiveModel::Serializer
attributes :id, :sender_id, :recipient_id, :sender_type, :subj, :body, :status, :sender
def sender
object.user.try('username')
end
end
class MessageSerializer
我的消息如下
class Api::MessagesController < Api::BaseController
def index
@messages = current_user.incoming_messages
render json: @messages, serializer: MessageSerializer
end
end
class Api::MessagesController
但问题是,抛出到客户端的序列化对象包含消息模型ie中的所有字段;它包含已创建的\u at和已更新的\u at字段
似乎它没有使用序列化程序
可能出了什么问题?
我对此搜索了很多,但没有找到任何有帮助的帖子
谢谢您使用的是什么版本的AMS 我也遇到了同样的问题,通过将AMS版本从0.9.X更改为0.8.X,我可以解决这个问题。这可以通过向文件中添加版本号来实现
gem 'active_model_serializers', '~> 0.8.0'
AMS GitHub回购协议中有相关注释
我没有降级,我花了一些时间尝试不同的事情,最后我得到了如下模式:
def sender
if object.sender
serializer = SenderSerializer.new(object.sender)
ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:senders]
end
end
def attachments
attachments = object.attachments.to_a
return [] if attachments.empty?
serializer = ActiveModel::Serializer::ArraySerializer.new(attachments, each_serializer:AttachmentSerializer)
ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:attachments]
end
这很难看,但对我来说很有帮助
对于一个有很多关系的人,你可以这样做:
def sender
if object.sender
serializer = SenderSerializer.new(object.sender)
ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:senders]
end
end
def attachments
attachments = object.attachments.to_a
return [] if attachments.empty?
serializer = ActiveModel::Serializer::ArraySerializer.new(attachments, each_serializer:AttachmentSerializer)
ActiveModel::Serializer::Adapter::JsonApi.new(serializer).as_json[:attachments]
end
在BaseController中,是否添加了以下include命令
include ActionController::Serialization
这是因为在rails api中默认情况下不加载序列化。你必须这样做:
class ApplicationController < ActionController::API
include ::ActionController::Serialization
end
class ApplicationController
将此更改为class Api::MessagesController
更改为class Api::MessagesController
,并将此更改为同时呈现json:@messages并重试一次不好。BaseController类继承ApplicationController类。所以基本上是一样的,谢谢!在意识到这一点之前会浪费几个小时!这是正确的解决方案。永远不要降低宝石的等级。这对我来说没有任何改变。还有其他想法吗?