Verwenden von link_to mit eingebettetem HTML


100

Ich verwende das Bootstrap-Material von Twitter und habe den folgenden HTML-Code:

<a class="btn" href="<%= user_path(@user) %>"><i class="icon-ok icon-white"></i> Do it@</a>

Was ist der beste Weg, dies in Rails zu tun? Ich würde gerne benutzen, <%= link_to 'Do it', user_path(@user) %>aber das <i class="icon-ok icon-white"></i>wirft mich ab?

Antworten:


260

Zwei Wege. Entweder:

<%= link_to user_path(@user) do %>
  <i class="icon-ok icon-white"></i> Do it@
<% end %>

Oder:

<%= link_to '<i class="icon-ok icon-white"></i> Do it@'.html_safe, user_path(@user) %>

1
Vielleicht sollte es <%= link_to ...im Beispiel mit Block sein?
Voldy

Es sollte definitiv sein. Vielen Dank!
Veraticus

3
Möglicherweise fehlt '.html_safe' nach der Zeichenfolge für das Symbol im zweiten Beispiel?
HO

Ich wusste nicht, dass du einen Block übergeben kannst link_to- danke , dass du mich unterrichtet hast!
yas4891

16

Ich hatte in letzter Zeit das gleiche Bedürfnis. Versuche dies:

<%= link_to '<i class="icon-ok icon-white"></i> Do it'.html_safe, user_path(@user) %>


11

Sie haben auch die Möglichkeit, eine Hilfsmethode wie folgt zu erstellen:

def link_fa_to(icon_name, text, link)
  link_to content_tag(:i, text, :class => "fa fa-#{icon_name}"), link
end

Passen Sie die Klassen an Ihre Bedürfnisse an.


8

Wenn Sie einen Link in Rails wünschen, der dieselbe Symbolklasse aus dem Twitter-Bootstrap verwendet, müssen Sie nur so etwas tun.

<%= link_to "Do it@", user_path(@user), :class => "btn icon-ok icon-white" %>

2
@PeterNixey nein, das tut es nicht, es lässt es wie eine Schaltfläche aussehen. Wenn Sie die btnKlasse verlassen, sehen Sie nur das Symbol. Der Button-Look bedeutet nicht, dass es sich um einen Button handelt.
Webdevotion

7

Verwenden von HAML:

= link_to model_path do
  %img{src: '/assets/someimg.png'}

6

In der Edelstein-Twitter-Bootstrap-Schiene: Sie erstellen eine Helfer-Glyphe

  def glyph(*names)
    content_tag :i, nil, :class => names.map{|name| "icon-#{name.to_s.gsub('_','-')}" }
  end

Sie können es also wie folgt verwenden: glyph(:twitter) und Ihr Link-Helfer könnte folgendermaßen aussehen:link_to glyph(:twitter), user_path(@user)


Sie könnten mehrere Klassen für das a-Tag zulassen ... In allen Fällen, welche werden die Anwendungsfälle sein?
Evaevans

1
Dies ist eine großartige Möglichkeit, eine Verknüpfung mit einer Glyphe (Font Awesome) herzustellen! Um weitere Klassen hinzuzufügen, verwenden Sie so etwas wie <%= link_to glyph(:comments), post_path(post), :class => "btn-small btn-warning" %>. Hier commentsist der Name des Font Awesome-Charakters, post_path(post)die Ziel-URL und class =>zeigt an, welche Klassen die Glyphe verwenden wird.
Weston

5

In normalem HTML tun wir

<a href="register.html"><i class="fa fa-user-plus"></i> Register</a>

In Ruby On Rails:

<%= link_to routeName_path do %>
  <i class="fa fa-user-plus"></i> Link Name
<% end %>

<%= link_to register_path do %>
   <i class="fa fa-user-plus"></i> Register
<% end %>

Dies ist meine Ausgabe


3

Ich werde es versuchen, da Sie noch keine Antwort akzeptiert haben
und die anderen Antworten nicht zu 100% das sind, wonach Sie gesucht haben.
Dies ist der Weg, um es auf Rails-Weise zu tun.

<%= link_to(user_path(@user), :class => 'btn') do %>
  <i class="icon-ok icon-white"> </i> Do it!
<% end %>

Bearbeiten:
Ich lasse meine Antwort als zukünftige Referenz, aber @ justin-herrick hat die richtige Antwort, wenn ich
mit Twitter Bootstrap arbeite.


2

Ich denke, Sie können es durch eine Hilfsmethode vereinfachen, wenn Sie es häufig in Ihrer Anwendung verwenden.

Fügen Sie es in helper / application_helper.rb ein

def show_link(link_text, link_source)
  link_to("#{content_tag :i, nil, class: 'icon-ok icon-white'} #{link_text}".html_safe,
    link_source, class: "btn")
end

Rufen Sie es dann wie link_to aus Ihrer Ansichtsdatei auf

<%= show_link "Do it", user_path(@user) %>

2

Wenn Sie den Bootstrap 3.2.0 verwenden, können Sie diesen Helfer in Ihrem verwenden app/helpers/application_helper.rb

module ApplicationHelper
  def glyph(*names)
    content_tag :i, nil, :class => names.map{|name| "glyphicon glyphicon-#{name.to_s.gsub('_','-')}" }
  end
end

und dann in Ihren Ansichten:

link_to glyph(:pencil) + ' Edit', edit_post_path(@post), class: 'btn btn-warning'

1
def show_link (source, text)
  link_to source, {'data-original-title' => 'Show', 'data-toggle' => 'tooltip', :class => 'btn btn-xs btn-success'} do
    "#{text} #{content_tag :i, nil, class:' glyphicon glyphicon-eye-open' }".html_safe
    end
end

0

Helfer basierend auf dem Vorschlag von Titas Milan, aber mit einem Block:

def show_link(link_text, link_source)
  link_to link_source, { class: 'btn' } do
    "#{content_tag :i, nil, class: 'icon-ok icon-white'} #{link_text}".html_safe
  end
end
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.