2012-01-25 21 views
6

mam metodę badawczą w pomocników plik/application_helper.rb:Różnica między <% ... %> i <%= .. %> w szynach 3

def test 
    concat("Hello world") 
end 

Następnie w index.html.erb zadzwonię jak:

Blah 
<% test %> 

wyświetlacz przeglądarka:

Blah Hello world

To normalnie, ale jeśli zmienię

<%= test %> 

wyświetlacz Przeglądarka:

Blah Witam worldBlah Witaj, świecie

To powielać wszystkie strony. Nie wiem dlaczego? Jaka jest różnica między nimi? Dzięki za pomoc!

+1

Czy istnieje szczególny powód, dla którego używasz 'concat'? –

Odpowiedz

10

Od the Rails docs, concat należy używać tylko w bloku kodu <% %>. Kiedy używasz go w bloku kodu <%= %>, widzisz go dwa razy, ponieważ concat dołącza dostarczony tekst do bufora wyjściowego, ale potem również zwraca cały bufor wyjściowy z powrotem do twojej metody pomocniczej, która jest następnie wyprowadzana przez <%=, powodując cała strona do powielenia.

Zwykle nie powinieneś używać numeru concat, jeśli w ogóle (nigdy nie spotkałem się z sytuacją, w której potrzebowałem). W swoim pomocnikiem, można po prostu to zrobić:

def test 
    "Hello world" 
end 

a następnie użyć <%= test %> w widoku.

+0

Dobrze grałem, sir. –

+0

Dziękuję Dylan Markow, czy możesz mi pokazać, że w takim przypadku są używane <% %> i <%= %>? Używam dużo concat w mojej metodzie pomocnika, czy to dobrze? Jeśli nie, jak rozwiązać? (Używam programu concat do pisania znaczników html w metodzie pomocniczej) – banhbaochay

13

Zwykle <%%> jest fragmentem kodu Railsów (tj. Rozpoczynającym warunkowe, kończącym warunkowe, itp.), Podczas gdy <% =%> faktycznie ocenia wyrażenie i zwraca wartość do strony.

9

Jaka jest różnica?

<% %> Chodźmy ocenić kod szyn w widoku

<%= %> Chodźmy ocenić kod szyn w widoku i wypisuje wynik na stronie

Przykład # 1: Równy znak jest analogiczny do "puts", więc:

<%= "Hello %> 

...jest taka sama jak:

<% puts "Hello" %> 

Przykład # 2:

<% if !user_signed_in? %> 
    <%= "This text shows up on the page" %> 
<% end %> 

#returns "This text shows up on the page" if the user is signed in 
+0

Szukałem <%- -%>. Czy wiesz przypadkiem, co robi? – serengeti12

-1

zobaczyć to:

<%= You need to do this %> 
<% You shouldn't do this %> 
4

To jest tak jak tego

<% execute this code and display nothing %> 

i

<%= execute this code and display the result in the view %> 
Powiązane problemy