渲染json时没有调用ActiveModel :: Serializer?

时间:2013-12-28 07:05:15

标签: json serialization ruby-on-rails-4 active-model-serializers

我正在尝试在Rails 4.0.0中使用active_model_serializers来序列化我的json响应。但是,当我使用

时,AMS类似乎根本没有被调用/使用
render json: user

我不确定是否存在某些配置问题,或者我是否错误地使用了命名空间。

Gemfile有:

gem 'active_model_serializers', '0.8.0'

Controller(在app / controllers / api / v1 / users_controller.rb中):

module API
  module V1
    class UsersController < API::V1::BaseController
      def show
        user = User.find(params[:id])
        render json: user
      end
    end
  end
end

UserSerializer(在app / serializers / user_serializer.rb中)

class UserSerializer < ActiveModel::Serializer
  attributes :id, :first_name, :last_name
end

但是在json的回应中,我仍然看到了完整的对象,即

{"id":1,"first_name":"Test","last_name":"User1","created_at":"2013-12-26T07:12:02.618Z","updated_at":"2013-12-26T07:12:02.618Z"}

我已经尝试了从显式调用render json: user, serializer: UserSerializer到命名空间序列化器到API :: V1的所有内容,结果是相同的。我在这里错过了什么吗?

修改:这是通过将BaseController继承自ActionController::Base而不是ActionController::Metal来修复的。但不完全确定ActionController::Metal中缺少的是什么。

2 个答案:

答案 0 :(得分:1)

我在Rails3上遇到了类似的问题,我不得不将此行添加到app initializer文件夹

ActionController::API.send(:include, ActionController::Serialization)

检查是否必须与您的事情类似

ActionController:: Metal.send(:include, ActionController::Serialization)

答案 1 :(得分:1)

包括ActionController :: Serialization

ApplicationController中的