我有 user
和 address
。
一个用户有一个地址。所以我使用应用以下关联。
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/