为什么 as_json 不 return 关联 has_one 中的空对象?
Why as_json does not return empty object in has_one association?
我有 user
和 address
。
一个用户有一个地址。所以我使用 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 模型,编辑上面的代码
我有 user
和 address
。
一个用户有一个地址。所以我使用 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 模型,编辑上面的代码