【问题标题】:rails: active model serializer looking for wrong serializerrails:活动模型序列化器寻找错误的序列化器
【发布时间】:2014-05-01 18:50:50
【问题描述】:

当我调用 create 方法时,我得到一个 nameError。

Failure/Error: post :create, { user: { email: 'charles@example.com',
     NameError:
       uninitialized constant API::V1::UsersController::UserV1Serializer

为什么要将 UsersController 模块添加到它正在寻找的类中?在我的会话控制器中,我使用相同的确切渲染线,它不会抱怨。到底是怎么回事?

app/controllers/api/v1/users_controller.rb

class API::V1::UsersController < API::V1::BaseController
    ...
    ...
    def create
        user = User.new(user_params)
        if user.save
          sign_in :user, user, store: false
        end
        render json: user, serializer: UserV1Serializer, root: 'user'
      end

app/serializers/api/v1/user_v1_serializer.rb

class API::V1::UserV1Serializer < ActiveModel::Serializer
  attributes :id, :email

  def attributes
    hash = super
    if scope == object
      hash[:token] = object.authentication_token
    end
    hash
  end
end

【问题讨论】:

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


    【解决方案1】:

    您需要指定完整的命名空间类名称API::V1::UserV1Serializer,而不是指定UserV1Serializer

    如果您只指定UserV1Serializer,它会在当前控制器API::V1::UsersController::UserV1Serializer 中查找序列化程序类,这就是您收到错误的原因

    uninitialized constant API::V1::UsersController::UserV1Serializer.

    改用这个:

    render json: user, serializer: API::V1::UserV1Serializer, root: 'user'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      • 2016-01-23
      相关资源
      最近更新 更多