Как изменить поведение по умолчанию для пустых частей JBuilder?

Отношение модели: Article belongs_to Author

Пример представления jbuilder:

json.extract! article,
  :id,
  :created_at,
  :updated_at
json.author article.author, partial: 'author', as: :author

Что происходит, когда у статьи нет автора:

{
   "id": 1,
   "created_at": "01-01-1970",
   "updated_at": "01-01-1970",
   "author": []
}

Вопрос:

Есть ли чистый способ заставить jbuilder отображать null или {}, когда переменная, переданная в связанный шаблон, пуста? Эта проблема распространена в довольно больших приложениях, и добавление такого кода article.author.empty? ? json.author(nil) : json.author(article.author, partial: 'author', as: :author) везде - это не то, что я хотел бы делать. Возможно, какая-то форма помощника, которая не потребует слишком большого рефакторинга?

Я не хочу переопределять базовую функциональность jbuilder, поскольку я не хочу ее ломать (например, частичные, принимающие несколько переменных).

Связанная проблема с jbuilder: https://github.com/rails/jbuilder/issues/350


person Krzysztof Karski    schedule 24.07.2017    source источник


Ответы (1)


Это выполнит то, что вы хотите

json.author do
  if article.author.blank?
    json.null!
  else
    json.partial! 'authors/author', author: article.author
  end
end

Я бы предложил помощника, чтобы избежать дублирования:

module ApplicationHelper
  def json_partial_or_null(json, name:, local:, object:, partial:)
    json.set! name do
      object.blank? ? json.null! : json.partial!(partial, local => object)
    end
  end
end

Тогда вы бы назвали это так:

json_partial_or_null(json, name: 'author', local: :author, object: article.author, partial: 'authors/author')
person m. simon borg    schedule 24.07.2017