Я использую websocket-rails
gem для веб-сокетов, и я хотел бы использовать ActiveModel::Serializers для создания полезной нагрузки JSON для сообщения веб-сокета. Можно ли использовать сериализатор без использования render
в контроллере?
Можно ли использовать ActiveModel::Serializers вне контроллера Rails?
Ответы (2)
Изучив исходный код, я нашел ответ, который искал. Вы можете использовать AMS, явно создав сериализатор: ConversationSerializer.new(Conversation.last).as_json
для коллекции: ActiveModel::Serializer::CollectionSerializer.new(Conversation.all, serializer: ConversationSerializer).as_json
person
Anatoliy Kukul
schedule
24.03.2015
Этот класс был перемещен/переименован в:
ActiveModel::Serializer::CollectionSerializer
в версии 0.10.
- person Shaun; 11.05.2016
Да, это возможно.
Допустим, у вас есть модель 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"
person
Daniel Loureiro
schedule
24.03.2015
Это работает, только если
p
представляет один экземпляр Product
(например, Product.first)
- person Daniel Bonnell; 19.01.2017
ConversationSerializer.new(Conversation.last).as_json
- person Anatoliy Kukul   schedule 24.03.2015ActiveModel::ArraySerializer.new(Conversation.all, serializer: ConversationSerializer).as_json
- person Anatoliy Kukul   schedule 24.03.2015