2015-04-15 18 views
6

Sto tentando di rendere un file JBuilder parziale utilizzando la sottostanteJbuilder parziale con il percorso

json.(@request, :id) 

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

parziale è inferiore (utenti/_user_reduced.json.jbuilder)

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

Tuttavia, ottengo l'errore:

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

È come se la variabile utente locale non fosse impostata. Qual è la sintassi per l'impostazione di una variabile locale su un percorso parziale di jbuilder?

risposta

7

Ho cercato di risolvere il problema per ore e ho scoperto, infine, che la sintassi (il pensiero elencato nel readme di jbuilder) non funziona. È necessario formattare i tuoi parziali come di seguito:

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

Quindi, nel mio caso, sarebbe:

json.(@request, :id) 

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

C'è una scorciatoia: 'json.profile fare json.partial! 'users/user_reduced', utente: @ request.user ' –

+2

Non è necessario includere partial: o locals: –

+0

ma se è necessario passare più variabili, questo collegamento non funziona. Esempio: 'json.partial! partial: 'users/user_reduced', local: {user: @ request.user, other: 'value'} ' –