Wie wickle ich link_to um einen HTML-Ruby-Code?

116

Wie lege ich einen Link um den Ansichtscode? Ich kann nicht herausfinden, wie mehrere Zeilen mit Ruby-Code an eine einzelne link_toMethode übergeben werden. Das Ergebnis, das ich suche, ist, dass Sie auf die Spalte klicken und die Show-Seite erhalten:

<div class="subcolumns">
  <div class="c25l">
        <div class="subcl">
        <%= image_tag album.photo.media.url(:thumb), :class => "image" rescue nil  %>
        </div>
    </div>
  <div class="c75r">
        <div class="subcr">
            <p><%= album.created_at %></p>
            <%= link_to h(album.title), album %>
            <p><%= album.created_at %></p>
            <p><%= album.photo_count %></p>
        </div>
  </div>
</div>
atmorell
quelle

Antworten:

269

link_to Nimmt einen Codeblock (> = Rails 2.2), den er als Hauptteil des Tags verwendet.

Also tust du es

<%= link_to(@album) do %>
  html-code-here
<% end %>

Aber ich bin mir ziemlich sicher, dass das Verschachteln diveines aTags in einem Tag kein gültiger HTML-Code ist.

BEARBEITEN: =Charakter hinzugefügt gemäß Amin Arianas Kommentar unten.

Thorbjørn Hermansen
quelle
17
Dieser Kommentar ist nur eine Referenz: <a> <div> </ div> </a> ist in HTML5 gültig, jedoch nicht in früheren HTML-Spezifikationen. Eine ähnliche Frage finden Sie unter stackoverflow.com/questions/796087/make-a-div-into-a-link .
Chucknelson
Rails 2.3.8 erhält weiterhin "Syntaxfehler, unerwartetes ')'" unter Verwendung der obigen Syntax.
daedelus_j
Wenn Sie einen komplexeren Pfad haben, können Sie einfach die Parameter hinzufügen, wobei der ursprüngliche Inhalt fehlt, z. B. <% = link_to some_path, Methode :: post%>
Obromios
13

Dies kann auch für einige ein Problem sein:

Stellen Sie sicher, <%=dass Sie schreiben, wenn Sie einen einfachen Link mit Code anstelle von erstellen <%.

z.B

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
sybohy
quelle
Ich denke, dass dies in Rails 3+
m33lky
8

Für ältere Rails-Versionen können Sie verwenden

<% content_tag(:a, :href => foo_path) do %>
  <span>Foo</span>
<% end %>
Omar Qureshi
quelle
6

Sie können link_tomit einem Block verwenden:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
quelle
3
link_to erfordert '=', um angezeigt zu werden (auch mit einem Block)
Brandon
-2

Ich weiß, dass diese Antwort etwas verzögert ist - aber ich wurde heute hierher geleitet und habe keine gute Antwort gefunden. Folgendes sollte funktionieren:

<% link_to raw(html here), @album %>
Rob Dawson
quelle
5
Dies sollte nicht verwendet werden, da alle in das eingegebenen HTML- rawDateien für XSS anfällig sind.
Aurril
Nicht unbedingt, es kann sein, dass der HTML-Code von einer Stelle in Ihrer eigenen App generiert wird, von der Sie wissen, dass sie sicher ist. Dennoch ist es am besten, dies in 99% der Situationen zu vermeiden. (Ganz zu schweigen davon, dass der obige Code sowieso einen Fehler hat, er sollte damit beginnen <%=, nicht <%.)
GMA
Nicht der beste Weg. HTML hier müsste von Ihrer eigenen App generiert und sichergestellt werden. Es gibt andere bessere Möglichkeiten in den obigen Antworten.
Joshua Dance