2012-07-03 3 views
16

Я пытаюсь получить эту работу:link_to в помощнике с блоком

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

но это только показывает мне значок, указанный i (щебет-самозагрузки CSS), а не текст в name, что же Я делаю неправильно?

ответ

26

Возвращаемое значение блока становится его содержимым. Возвращается только последняя строка.

Вы должны объединить две строки вместе с + для производства одного возвращаемого значения:

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

Вы должны будете использовать html_safe, чтобы предотвратить содержание тега из автоматически будучи HTML закодированы:

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

Говоря из личного опыта с использованием Twitter Bootstrap, я знаю, что вы будете нуждаться в пространстве между name и content_tag:

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

В качестве альтернативы, если вы находитесь внутри шаблона ERB, вы можете оба значения выходных с <%=:

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

если им делать это моя кнопка показывает: 'Foo <я класс =«значок плюс значок-белый»>' – wintersolutions

+0

Вы можете использовать HTML безопасный для пометить строки как не требует HTML кодирования. – meagar

+4

Я тоже тестировал его с помощью html_safe, но он не работал, но это работает: 'link_to (" # ", class:" add_fields btn btn-success ") do (name + '' + content_tag (: i," ", : class => "icon-plus icon-white")). html_safe end', если вы хотите, вы можете обновить свой ответ, спасибо вам большое! – wintersolutions

2

Есть две вещи, которые я бы рассмотреть следующие вопросы:

1) все содержимое необходимо очистить блок link_to.

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

2) Можем ли мы ожидать ввода nil?

Все будет разорвано, если мы позвоним html_safe на объект nil. Используйте raw, если есть вероятность, что это может произойти.

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

This является хорошим прочтением по этому вопросу. My blog post представляет интересное применение этого.

1

Для тех, кто использует шрифт - удивительный или что-то еще, он может не показывать значок. Но это решение сработало.

link_to :sort => column, :direction => direction do 
    "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe 
end 
Смежные вопросы