2009-07-06 2 views
103

Wie umgehe ich einen Link um Ansichtscode? Ich kann nicht herausfinden, wie mehrere Zeilen mit Ruby-Code an eine einzige link_to-Methode übergeben werden. Das Ergebnis ich suche, ist, dass Sie die Spalte klicken und die Show-Seite erhalten:Wie umgehe ich link_to um etwas HTML Ruby Code?

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

Antwort

242

link_totakes a block of code (> = Rails 2.2), die es:

<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> 
+14

Dieser Kommentar ist nur eine Referenz:

ist gültig in HTML5, aber nicht in früheren HTML-Spezifikationen. Siehe http://stackoverflow.com/questions/796087/make-a-div-into-a-link für eine ähnliche Frage. – chucknelson

+0

Schienen 2.3.8 immer noch "Syntaxfehler, unerwartet ')" mit der obigen Syntax. –

+0

Wenn Sie einen komplexeren Pfad haben, können Sie einfach die Parameter hinzufügen und den ursprünglichen Inhalt, z. <% = link_to some_path, Methode:: post%> – Obromios

6

Sie link_to mit einem Block verwenden können wird als der Körper des Tags verwendet.

Also, Sie

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

Aber ich ziemlich sicher sind, dass ein div in einem a Tag Nest nicht gültig HTML ist.

EDIT: Hinzugefügt = Zeichen pro Amin Ariana Kommentar unten.

+1

nur in> = Rails 2.2 –

+0

Ah, ok das war mir nicht bewusst! Danke Omar. –

+2

link_to erfordert '=' (auch mit einem Block) – Brandon

7

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

<% content_tag(:a, :href => foo_path) do %> 
    <span>Foo</span> 
<% end %> 
+0

Gespeichert mein Tag :) danke .. arbeitete wie ein Charme .. –

0

Ein bisschen von einer Verzögerung zu dieser Antwort weiß ich verwenden - aber ich war hier heute gerichtet ist, und nicht eine gute Antwort gefunden hat. Folgendes sollte funktionieren:

<% link_to raw(html here), @album %> 
+2

Dies sollte nicht verwendet werden, da alle HTML-Eingabe im 'rohen' anfällig für XSS ist. – Aurril

+0

Nicht unbedingt, es könnte der Fall sein, dass der HTML-Code von irgendwo in Ihrer eigenen App erzeugt wird, von der Sie wissen, dass sie sicher ist. Dennoch ist es am besten, dies in 99% der Fälle zu vermeiden. (Ganz zu schweigen davon, dass der obige Code sowieso einen Fehler hat, sollte er mit '<% ​​=', nicht '<%' beginnen.) – GMA

+0

Nicht der beste Weg. html müsste hier von Ihrer eigenen App generiert und sicher gestellt werden. Es gibt andere bessere Möglichkeiten in den Antworten oben. –

11

Auch dies ein Problem sein kann für einige:

Stellen Sie sicher, <%= zu schreiben, wenn Sie einen einfachen Link mit Code darin statt <% tun.

z.B.

<%= link_to 'some_controller_name/some_get_request' do %> 
    Hello World 
<% end %> 
+0

Ich denke, das ist in Rails 3+ erforderlich – m33lky

Verwandte Themen