是否可以在 Rails 控制器之外使用 ActiveModel::Serializers?

Is it possible to use ActiveModel::Serializers outside of Rails controller?

我正在使用 websocket-rails gem 用于网络套接字,我想使用 ActiveModel::Serializers 为网络套接字消息创建 JSON 有效负载。 是否可以在控制器中不使用 render 的情况下使用序列化程序?

查看源代码后,我找到了我正在寻找的答案。 您可以通过显式实例化序列化程序来使用 AMS:ConversationSerializer.new(Conversation.last).as_json

对于 collection: ActiveModel::Serializer::CollectionSerializer.new(Conversation.all, serializer: ConversationSerializer).as_json

是的,有可能。

假设您有一个 Product 模型和一个 p 记录:

# p = Product.first
ProductSerializer.new(p).to_json

此外,请注意您可能必须加载所需的文件:

require "action_controller"
require "action_controller/serialization"
require "#{Rails.root}/app/serializers/product_serializer.rb"