Rails Active Model序列化程序未设置root

时间:2013-07-23 05:06:10

标签: activemodel active-model-serializers

我有一个不是ActiveRecord对象的类,我试图为它创建一个AM序列化器。我可以返回正确的json,但它不包括根

在我的控制器中有这个

format.json { render json: @current_user, root: "current_user" }

我的班级看起来像这样

class CurrentUser 
  include ActiveModel::Validations
  include ActiveModel::Conversion
  extend ActiveModel::Naming

  attr_accessor :first_name, :last_name, :user_type, :user_id

end

我也尝试在控制器中添加它

 def default_serializer_options
  {root: true}
 end

但我的json对象仍然没有Ember Model所需的根

返回对象

{"first_name":"Luke","last_name":"Skywalker","user_type":"Padawan","user_id":12}

我需要

{current_user: {"first_name":"Luke","last_name":"Skywalker","user_type":"Padawan","user_id":12} }

2 个答案:

答案 0 :(得分:3)

对于未来可能遇到同样问题的人, 使用 ActiveModelSerializers 0.10.x 时,只需添加到现有的初始值设定项或创建一个新的初始值设定项并添加它以在响应中包含根节点:

配置/初始化/ serializer.rb ActiveModel::Serializer.config.adapter = :json

AMS documentation表示版本0.9.x和0.8.x不向后兼容。

答案 1 :(得分:1)

如果在您的控制器中使用default_serializer_options不起作用,您可能需要查看config/initializers/wrap_parameters.rb include_root_in_json选项。

如果您感到好奇,可以找到该选项的相关源代码here