簡體   English   中英

呈現JSON時未使用ActiveModel :: Serializer

[英]ActiveModel::Serializer not used when rendering JSON

我在Rails中遇到序列化器問題。 我正在嘗試為模型渲染自定義json。 為此,我在我的Gemfile中添加了active_model_serializer並編寫了一些Serializers。 問題在於,當我渲染JSON時,它是渲染我的整個對象,而不是調用序列化程序。

這是我的代碼

用戶序列化器

class UserSerializer < ActiveModel::Serializer
  attributes :id, :email
end

用戶模型

# Class model for users
class User < ActiveRecord::Base
  ...
end

反應模型

class Response
  attr_accessor :status, :data
end

顯示方式

def send_response(*args)
  r = Response.new
  r.status = args[0] # This is the HTTP code
  r.data = args[1] # This is a user object
  render json: r, status: r.status
end

寶石文件

source 'https://rubygems.org'

gem 'rails', '4.2.0'
gem 'pg'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'devise'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'omniauth'
gem 'active_model_serializers'

group :development, :test do
  gem 'byebug'
  gem 'web-console', '~> 2.0'
  gem 'spring'
end

您還必須為Response創建一個序列化器。 當您傳遞一個普通對象以render json:它只會嘗試在該對象上調用.to_json 它不知道甚至存在嵌套對象的序列化器。

class ResponseSerializer < ActiveModel::Serializer
  attributes :title, :body
  belongs_to :user
end

-

def send_response(*args)
  r = Response.new
  r.status = args[0] # This is the HTTP code
  r.data = args[1] # This is a user object
  render json: r, status: r.status
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM