【问题标题】:Belongs_to association in ActiveModel::Serializer removes root from JSONActiveModel::Serializer 中的 Belongs_to 关联从 JSON 中删除根
【发布时间】: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


【解决方案1】:

我想出了解决问题的方法,但如果有人知道 belongs_to 出了什么问题,我仍然希望得到一个解释。

将belongs_to 更改为has_one 有效并添加“用户”:作为JSON 根。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多