2015-04-15 1 views
6

je tente de rendre un fichier JBuilder partiel en utilisant le dessousJbuilder partielle avec le chemin

json.(@request, :id) 

json.profile do 
    json.partial! partial: 'users/user_reduced', user: @request.user 
end 

le partiel est inférieur à (utilisateurs/_user_reduced.json.jbuilder)

json.(user, :id, :name, :sex) 

Cependant, je reçois l'erreur:

ActionView::Template::Error (undefined local variable or method `user' for #<#<Class:0x007fe4ebc91878>:0x007fe4ebe599f8>): 

C'est comme si la variable utilisateur locale n'était pas définie. Quelle est la syntaxe pour définir une variable locale sur un chemin partiel jbuilder?

Répondre

7

J'ai essayé de résoudre ce problème pendant des heures, et j'ai finalement trouvé que la syntaxe (pensée listée sur le readme de jbuilder) ci-dessus ne fonctionnait pas. Vous devez formater votre partials comme ci-dessous:

json.partial! 'partials/partial_path', locals: {local_var: my_local_var} 

Donc dans mon cas, ce serait:

json.(@request, :id) 

json.profile do 
    json.partial! partial: 'users/user_reduced', locals: {user: @request.user} 
end 
+1

Il y a un raccourci: 'json.profile faire json.partial! 'users/user_reduced', utilisateur: @ request.user ' –

+2

Il n'est pas nécessaire d'inclure partial: ou local: –

+0

mais si vous avez besoin de transmettre plus de variables, ce raccourci ne fonctionne pas. Exemple: 'json.partial! partial: 'users/user_reduced', locaux: {user: @ request.user, autre: 'value'} ' –