2012-07-03 12 views
16

staram się uzyskać to do pracy:w link_to pomocnika z bloku

link_to("#", class: "add_fields btn btn-success") do 
    name 
    content_tag(:i, "", :class => "icon-plus icon-white") 
end 

ale to tylko pokazuje mi ikonę określony przez i (twitter-bootstrap css), a nie tekst name, co ja Robię źle?

Odpowiedz

26

Wartość zwracana bloku staje się jego zawartością. Zwracany jest tylko ostatni wiersz.

Musisz złączyć dwa ciągi razem z + do wytworzenia pojedynczej wartości zwracanej:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white") 
end 

Musisz użyć html_safe aby zapobiec zawartość tagu z automatycznie kodowany HTML:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

Mówiąc z własnego doświadczenia z Twitter Bootstrap, wiem, trzeba będzie przestrzeń między name i content_tag:

link_to("#", class: "add_fields btn btn-success") do 
    name + ' ' + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

Ewentualnie, jeśli jesteś wewnątrz szablonu ERB, można wyjść z <%= obie wartości:

<%= link_to(...) do %> 
    <%= name %> 
    <%= content_tag(...) %> 
<% end %> 
+0

jeśli robię to moje przycisk wskazuje: 'foo ' – wintersolutions

+0

Można używać bezpiecznego HTML, aby oznaczyć swoje struny jako nie wymagające kodowania HTML. – meagar

+4

Zrobiłem to również z html_safe i nie działało, ale działa: 'link_to (" # ", class:" add_fields btn btn-success ") do (name + '' + content_tag (: i," ", : class => "icon-plus icon-white")). html_safe end' jeśli chcesz, możesz zaktualizować swoją odpowiedź, dziękuję bardzo! – wintersolutions

2

Są dwie rzeczy bym rozważyć:

1) całą zawartość blok link_to wymaga dezynfekcji.

link_to("#", class: "add_fields btn btn-success") do 
    (name + content_tag(:i, "", class: "icon-plus icon-white")).html_safe 
end 

2) Czy możemy oczekiwać, że dane wejściowe będą miały wartość nil?

Rzeczy ulegną zniszczeniu, jeśli zadzwonimy pod numer html_safe na obiekcie nil. Użyj raw, jeśli jest taka szansa.

link_to("#", class: "add_fields btn btn-success") do 
    raw(name + content_tag(:i, "", class: "icon-plus icon-white")) 
end 

This to dobra lektura na ten temat. My blog post przedstawia interesującą aplikację tego.

1

Dla tych, którzy używają font-awesome lub czegoś innego, może nie wyświetlać ikony. Ale to rozwiązanie zadziałało.

link_to :sort => column, :direction => direction do 
    "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe 
end 
Powiązane problemy