2012-12-23 11 views
5

Es gibt zwei Möglichkeiten, dies zu tun.Sinatra Pass-Variablen zu erb

Zuerst ist zu verwenden :locals => {....} und andere zu verwenden ist @var_name. Ich frage mich nur, welcher ist besser/bevorzugt? Ich konnte die Antwort nirgends finden.

Dank

Antwort

7

ich keine Erfahrung haben, aber wahrscheinlich schreiben Sie weniger Code @var_name verwenden, aber wenn die Sie zwei Aktionen lassen sagen haben, die die gleiche Ansicht mit verschiedenen Objekten lassen Sie uns eine mit Bar mit foo und die anderen sagen, machen Sie Wahrscheinlich würde man Einheimische benutzen wollen.

Anstelle von @vars müssen Sie den gleichen var_name verwenden, der nicht wirklich darstellt, was drin ist. Wie: Es ist eine Liste von was ??

def bars 
    @list = Bar.all 
    erb :something 
end 

def foos 
    @list = Foo.all 
    erb :something 
end 

Oder vielleicht sollten Sie mit @vars gut sein, weil die meiste Zeit Sie eine Ansicht wiederverwenden, wenn Sie die gleiche Art von Objekten wie machen:

def foos 
    @foos = Foo.all 
    erb :something 
end 

def bar_foos 
    @foos = Foo.where(bar: true) 
    erb :something 
end 

So möchten Sie wahrscheinlich nur verwenden, Locals beim Rendern von Teiltönen, die meistens in verschiedenen Kontexten verwendet werden. Wie ein Formular, wenn Sie für eine @new_bar und eine vorhandene @ -Bar rendern. Nur ein Beispiel. Oder zum Beispiel ein @ current_user oder ein einfacher @user

+0

Danke für die ausführliche Antwort! – 0xSina

+0

Gute Antwort. Meine 2 Cent - wo immer möglich, beschränken den Umfang einer Variablen. Ich benutze immer Einheimische, wenn ich kann (die Rails Abhängigkeit von Instanzvariablen macht mich schaudern!) Der absurde Kontrapunkt wäre, warum nicht globale Variablen verwenden? Sie werden wegen des fehlenden Umfangs als schlecht angesehen, und Instanzvariablen sind nicht anders. Wo ich Instanzvariablen verwende, werden Werte an das Layout übergeben (Titel, zusätzliche Stylesheet-Referenzen ...) und Werte, die in 'before'- und' after'-Handlern gesetzt sind. – iain