Come avvolgo link_to attorno a un codice ruby ​​html?


116

Come avvolgo un collegamento attorno al codice di visualizzazione? Non riesco a capire come passare più righe con codice ruby ​​a un singolo link_tometodo. Il risultato che sto cercando è che fai clic sulla colonna e ottieni la pagina dello spettacolo:

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

Risposte:


271

link_to accetta un blocco di codice (> = Rails 2.2) che utilizzerà come corpo del tag.

Quindi lo fai

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

Ma sono abbastanza sicuro che annidare un divall'interno di un atag non sia HTML valido.

EDIT: =personaggio aggiunto per il commento di Amin Ariana di seguito.


17
Questo commento è solo un riferimento: <a> <div> </div> </a> è valido in HTML5, ma non nelle specifiche HTML precedenti. Vedi stackoverflow.com/questions/796087/make-a-div-into-a-link per una domanda simile.
chucknelson

Rails 2.3.8 continua a ricevere "errore di sintassi, ')'" inaspettato usando la sintassi precedente.
daedelus_j

Se hai un percorso più complesso, puoi semplicemente aggiungere i parametri, mancando il contenuto iniziale, ad esempio <% = link_to some_path, method:: post%>
Obromios

13

Inoltre, questo potrebbe essere un problema per alcuni:

Assicurati di scrivere <%=se stai facendo un semplice collegamento con del codice al posto di <%.

per esempio

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

Penso che questo sia richiesto in Rails 3+
m33lky

8

Per le versioni precedenti di Rails, puoi usare

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

6

Puoi usare link_tocon un blocco:

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

3
link_to richiede che '=' venga visualizzato (anche con un blocco)
Brandon

-2

Un po 'di ritardo su questa risposta, lo so, ma oggi sono stato indirizzato qui e non ho trovato una buona risposta. Quanto segue dovrebbe funzionare:

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

5
Questo non dovrebbe essere usato poiché tutto l'html inserito in rawè soggetto a XSS.
Aurril

Non necessariamente, potrebbe essere il caso che l'HTML venga generato da qualche parte all'interno della tua app che sai essere al sicuro. Tuttavia, è meglio evitarlo nel 99% delle situazioni. (Per non parlare del codice di cui sopra ha un errore comunque, dovrebbe iniziare con <%=, non <%.)
GMA

Non è il modo migliore. html qui dovrebbe essere generato dalla tua app e assicurato per essere sicuro. Ci sono altri modi migliori nelle risposte sopra.
Joshua Dance
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.