【问题标题】:Rails Serializer for Devise User model not being used未使用设计用户模型的 Rails 序列化程序
【发布时间】:2014-10-21 14:04:53
【问题描述】:

这是我的 Rails 应用程序给我的响应:

{"users":[{"users":{"id":20,"email":"subscriber@email.com", ...

它应该是这样的(这是另一个工作资源):

{"companies":[{"id":448,"name":"Microsoft Security ...

注意包装 users: 对象。

这是我的 User 模型的序列化器:

class UserSerializer < ApplicationSerializer
  attributes :id,
             :first_name,
             :last_name
end    

对于公司模型:

class CompanySerializer < ApplicationSerializer
  attributes :id, :name
end

我错过了什么?我需要做什么才能让 json 响应使用这个 UserSerializer 类?

def index
  load_users
  render json: @users
end

【问题讨论】:

  • 你能展示一下@users的结构吗?
  • 我正在使用 Devise,我认为这与序列化程序有关,但我不确定如何解决问题。
  • 如果你在渲染之前做pp @users,你会得到什么?
  • 这个gist.github.com/sergiotapia/2c5352b8cfb866b12508 - 这是序列化程序没有被拾取的问题。我已经仔细检查了文件名 (serializers/user_serializer.rb)、类名 (UserSerializer) - 我很确定它是 Devise,我不知道要覆盖什么。
  • 您是否创建了SubscriberSerializer &lt; UserSerializerPublisherSerializer &lt; UserSerializer 等...?

标签: ruby-on-rails json ember.js response serialization


【解决方案1】:

我知道 Rails 以某种方式忽略了我的序列化程序是一个问题。

在我的控制器中我写了这个:

# app/controllers/api/v1/users_controller.rb:

class Api::V1::UsersController < ApplicationController
  def default_serializer_options
    { each_serializer: UserSerializer } # I use each_serializer instead of serializer because it's rendering a collection.
  end
end

基本上我人工处理了代码以使用正确的序列化程序,现在它工作正常。

【讨论】:

    猜你喜欢
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 2018-06-28
    • 1970-01-01
    • 2014-02-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    相关资源
    最近更新 更多