【发布时间】:2014-12-05 15:31:40
【问题描述】:
我目前使用 Rails 编写 API。在观看了关于 ActiveModel::Serializer 的 RailsCast 之后,我想尝试一下。
对我当前模型的简要概述:
class Club < ActiveRecord::Base
has_many :users
end
class User < ActiveRecord::Base
validates :userName, presence: true
belongs_to :club
end
创建用户会返回以下 JSON:
{"id":1,"userName":"Test","firstName":"Test","lastName":"Test","created_at":"2014-10- 10T12:42:12.186Z","updated_at":"2014-10-10T12:42:12.186Z","city":"Test","street":"Test","mail":"Test","club_id":1}
在 ActiveModel::Serializer 页面中的示例中,我实现了 UserSerializer,如下所示:
class UserSerializer < ActiveModel::Serializer
attributes :id, :userName, :firstName, :lastName, :mail, :street, :city, :club_id
end
这确实将“用户”:作为根添加到我的 JSON 格式中。此外,示例显示添加
belongs_to :club
到序列化器。但是如果我添加belongs_to 我没有得到“用户”:作为我的JSON 的root。这是预期的行为吗?有没有办法改变这个? 经过额外的测试,似乎 "user": 根元素是随机的 - 尚未找到模式 - 添加或省略。
我尝试添加
root: true
我的 users_controller 也没有帮助。
【问题讨论】:
-
你试过在
User模型中使用self.include_root_in_json = true吗? -
是的,这行得通。但是我仍然想从问题的根源上解决错误。因为序列化器应该有一个一致的行为而不是随机改变。谢谢!
标签: ruby-on-rails json ruby-on-rails-4 serialization