是否可以在 Rails 控制器之外使用 ActiveModel::Serializers?
Posted
技术标签:
【中文标题】是否可以在 Rails 控制器之外使用 ActiveModel::Serializers?【英文标题】:Is it possible to use ActiveModel::Serializers outside of Rails controller? 【发布时间】:2015-03-24 14:26:11 【问题描述】:我将websocket-rails
gem 用于网络套接字,我想使用 ActiveModel::Serializers 为网络套接字消息创建 JSON 有效负载。
是否可以在控制器中不使用render
的情况下使用序列化程序?
【问题讨论】:
我可以通过显式实例化序列化器来做到这一点:ConversationSerializer.new(Conversation.last).as_json
但我仍然想不出序列化集合的方法
哦,知道了:ActiveModel::ArraySerializer.new(Conversation.all, serializer: ConversationSerializer).as_json
【参考方案1】:
查看源代码后,我找到了我正在寻找的答案。
您可以通过显式实例化序列化程序来使用 AMS:ConversationSerializer.new(Conversation.last).as_json
收集:
ActiveModel::Serializer::CollectionSerializer.new(Conversation.all, serializer: ConversationSerializer).as_json
【讨论】:
在 0.10 版中,此类已被移动/重命名为:ActiveModel::Serializer::CollectionSerializer
。【参考方案2】:
是的,有可能。
假设您有一个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"
【讨论】:
这仅适用于p
表示Product
的单个实例(例如Product.first)
以上是关于是否可以在 Rails 控制器之外使用 ActiveModel::Serializers?的主要内容,如果未能解决你的问题,请参考以下文章
如何获取模型中图像变体的 url(在控制器/视图之外)?主动存储
是否可以控制 Rails 读取 .CSS 文件的顺序,还是按惯例固定?