Почему as_json не возвращает пустой объект в ассоциации has_one? - PullRequest
1 голос
/ 11 октября 2019

У меня user и address. Один пользователь имеет один адрес. поэтому я использую прикладную следующую ассоциацию.

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

и в контроллере:

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

Проблема в том, что

возвращает объект JSON, такой как

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

если у меня есть адрес для идентификатора пользователя 1.

, но у меня нет адреса какого-либо пользователя. он возвращает

{id: 1, name: "abc"}

, но я хочу получить ответ вроде

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

, если у пользователя нет адреса.

1 Ответ

2 голосов
/ 11 октября 2019

Вероятно, существует более рельсовый способ сделать это, но вы можете просто переопределить атрибут address:

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

  def address
    super || {}
  end
end

Когда сериализатор проверяет адрес, если он присутствует, он возвращает адрес, и если это ноль или ложь, он вернет пустой хеш вместо того, чтобы не появляться.

РЕДАКТИРОВАТЬ: Согласно комментарию, это должно идти в UserSerializer, а не в модели пользователя, отредактированный код выше

...