ruby-on-rails - 为什么 as_json 在 has_one 关联中不返回空对象?

标签 ruby-on-rails associations has-one

我有 useraddress。 一个用户有一个地址。所以我使用应用以下关联。

class User < ApplicationRecord
  has_one :address, dependent: :destroy
end

在 Controller 中:

render json: User.find(1).as_json(include: :address)

问题是:

它返回一个像这样的 JSON 对象

{id: 1, name: "abc", address: {id: 1, user_id: 1}}

如果我有用户 ID 1 的地址。

但我没有任何用户的地址。它返回

{id: 1, name: "abc"}

但我想要这样的回应

{id: 1, name: "abc", address: {}} 

如果用户没有地址。

最佳答案

可能有更简单的方法,但您可以重新定义 address 属性:

class UserSerializer < ActiveModel::Serializer
  ...
  ...

  def address
    super || {}
  end
end

当序列化程序检查地址时,如果它存在,它将返回地址,如果它为 nil 或 false,它将返回一个空哈希而不是不出现。

编辑:根据评论,这需要进入 UserSerializer 而不是 User 模型,编辑上面的代码

关于ruby-on-rails - 为什么 as_json 在 has_one 关联中不返回空对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58345565/

相关文章:

ruby-on-rails - 如何限制 AWS CloudFront 使其仅处理来 self 域中单个目录的请求?

ruby-on-rails - 如何通过 Rails 3 中的子 Controller 创建父模型? (属于协会)

ruby-on-rails - 我应该使用哪个关联来描述 Ruby on Rails 中的 `Types of things'?

ruby-on-rails - 我应该在 ruby​​ on rails 中使用has_one 还是belongs_to?

ruby-on-rails - Rails 嵌套 has_one : cannot delete existing record

ruby-on-rails - 无法为 Ruby on Rails 安装 Active Admin : "Sprockets::FileNotFound..."

ruby-on-rails - ActiveRecord 提取到 SQL

ruby-on-rails - RoR 在两列中显示元素

node.js - 在 Sequelize.js 中使用关联实现数据库规范化

ruby-on-rails - RoR : has_one "or the other"?(或者,没有继承的多态性。)