为什么 as_json 不 return 关联 has_one 中的空对象?

Why as_json does not return empty object in has_one association?

我有 useraddress。 一个用户有一个地址。所以我使用 applied following association.

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

在控制器中:

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

问题是:

它returns一个JSON对象像

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

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

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

{id: 1, name: "abc"}

但我想要这样的回复

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

如果用户没有地址。

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

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

  def address
    super || {}
  end
end

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

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