2015-09-05 18 views
9

Sto lavorando alla parte più grezza di un modello, a cui ho aggiunto il supporto per le immagini. Idealmente mi piacerebbe mostrare l'immagine se stai modificando un modello, cosa che farei in questo modo.Come posso verificare se esiste una variabile, in eex?

<%= Logo.url({@company.logo, @company}, :thumb) %> 

Il problema è che la variabile società è disponibile solo nella azione di modifica, in quanto vi sono ancora una società sulla nuova azione, quindi ho bisogno di controllare se il @company è impostato.

<%= unless @company do %> 
    <%= Logo.url({@company.logo, @company}, :thumb) %> 
<% end %> 

Il problema è che questo produce il seguente errore.

"assegnare @company non disponibile in modello EEx assegna disponibili:. [: Azione,: changeset]"

ho provato con is_nil, ma lo stesso errore.

risposta

25

EDIT Prima di Phoenix 0.14.0@company restituirebbe nil se non fosse stato impostato. E 'stato cambiato per aumentare in modo che l'assegnazione sarebbe esplicito (esplicito sopra implicita.)


Se si utilizza uno o @companyassigns.company allora un errore verrà sollevata. Tuttavia, se si utilizza assigns[:company], restituirà zero se il valore non è impostato.

<%= if assigns[:company] do %> 
    <%= Logo.url({@company.logo, @company}, :thumb) %> 
<% end %> 

Vale la pena notare che se si utilizza un modello nidificato allora si avrà bisogno di passare questo attraverso troppo:.

<h1>New thing</h1> 
<%= render "form.html", changeset: @changeset, 
         action: thing_path(@conn, :create), 
         company: assigns[:company] %> 
+5

L'ideale però è quello di passare la variabile società anche se sarà essere nullo Eviterà un mucchio di indirezione. –

+0

@ JoséValim Questo è un buon punto - aggiungerò una nota alla risposta. – Gazler

Problemi correlati