2017-07-24 3 views
0

Modèle relation: Article belongs_to AuthorComment changer le comportement par défaut des partiels Jbuilder vides?

vue échantillon JBuilder:

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

Qu'est-ce qui se passe lorsque l'article n'a pas Auteur:

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

Question:

est-il un moyen propre à force jbuilder pour afficher null ou {} lorsque la variable transmise au modèle associé est vide? Ce problème est répandu à travers une assez grande application et l'ajout de code comme ça article.author.empty? ? json.author(nil) : json.author(article.author, partial: 'author', as: :author) partout n'est pas quelque chose que je voudrais faire. Peut-être une forme d'aide qui ne nécessiterait pas trop de refactoring?

Je ne veux pas remplacer la fonctionnalité de base de jbuilder car je ne veux pas la casser (partiels acceptant plusieurs variables par exemple).

question de JBuilder connexes: https://github.com/rails/jbuilder/issues/350

Répondre

1

Cela accomplir ce que vous voulez

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

je suggère une aide, même pour éviter tout double emploi:

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 

Ensuite, vous qualifieraient comme ceci:

json_partial_or_null(json, name: 'author', local: :author, object: article.author, partial: 'authors/author')