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

Ruby on rails 为什么as_json在has_one关联中不返回空对象?,ruby-on-rails,associations,has-one,Ruby On Rails,Associations,Has One,我有用户和地址。 一个用户有一个地址。所以我用下面的联想 class User < ApplicationRecord has_one :address, dependent: :destroy end 问题是: 它返回一个JSON对象,如 {id: 1, name: "abc", address: {id: 1, user_id: 1}} 如果我有用户id 1的地址 但我没有任何用户的地址。它回来了 {id: 1, name: "abc"} 但我想要像这样的回应 {id: 1,

我有
用户
地址
。 一个用户有一个地址。所以我用下面的联想

class User < ApplicationRecord
  has_one :address, dependent: :destroy
end
问题是:

它返回一个JSON对象,如

{id: 1, name: "abc", address: {id: 1, user_id: 1}}
如果我有用户id 1的地址

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

{id: 1, name: "abc"}
但我想要像这样的回应

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

如果用户没有地址。

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

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

  def address
    super || {}
  end
end
class UserSerializer
当序列化程序检查地址时,如果地址存在,它将返回地址;如果地址为nil或false,它将返回一个空哈希值,而不是不出现


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

谢谢你的回复,但是我得到了一个错误{}:hash的未定义方法serializable_hash
啊抱歉,我想你需要在序列化程序中使用它,我将edit@JasjeetSinghmark在这里说的是您需要在项目中安装的内容。然后生成一个UserSerializer并按照上面提到的方式放置代码
class UserSerializer < ActiveModel::Serializer
  ...
  ...

  def address
    super || {}
  end
end