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>

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.


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  %>

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 %>

6

Sie können link_tomit einem Block verwenden:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>

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 %>

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
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.