Comment enrouler link_to autour d'un code ruby ​​html?

116

Comment enrouler un lien autour du code de vue? Je ne peux pas comprendre comment passer plusieurs lignes avec du code ruby ​​à une seule link_tométhode. Le résultat que je recherche est que vous cliquez sur la colonne et obtenez la page d'affichage:

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

Réponses:

271

link_to prend un bloc de code (> = Rails 2.2) qu'il utilisera comme corps de la balise.

Alors tu fais

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

Mais je suis tout à fait sûr que l'imbrication d' divune abalise à l' intérieur d'une balise n'est pas du HTML valide.

EDIT: =Caractère ajouté par le commentaire d'Amin Ariana ci-dessous.

Thorbjørn Hermansen
la source
17
Ce commentaire n'est qu'une référence: <a> <div> </div> </a> est valide en HTML5, mais pas dans les spécifications HTML antérieures. Voir stackoverflow.com/questions/796087/make-a-div-into-a-link pour une question similaire.
chucknelson
Rails 2.3.8 obtient toujours une "erreur de syntaxe, inattendue ')'" en utilisant la syntaxe ci-dessus.
daedelus_j
Si vous avez un chemin plus complexe, vous pouvez simplement ajouter les paramètres, sans le contenu initial, par exemple <% = link_to some_path, method:: post%>
Obromios
13

Cela peut également être un problème pour certains:

Assurez-vous d'écrire <%=si vous faites un lien simple avec du code au lieu de <%.

par exemple

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
Sybohy
la source
Je pense que cela est nécessaire dans Rails 3+
m33lky
8

Pour les anciennes versions de Rails, vous pouvez utiliser

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

Vous pouvez utiliser link_toavec un bloc:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
la source
3
link_to nécessite '=' pour apparaître (même avec un bloc)
Brandon
-2

Un peu de retard sur cette réponse, je sais - mais j'ai été dirigé ici aujourd'hui et je n'ai pas trouvé de bonne réponse. Les éléments suivants devraient fonctionner:

<% link_to raw(html here), @album %>
Rob Dawson
la source
5
Cela ne devrait pas être utilisé car tout le HTML entré dans le rawest sujet à XSS.
Aurril
Pas nécessairement, il se peut que le HTML soit généré à partir de quelque part dans votre propre application que vous savez être en sécurité. Néanmoins, il est préférable d'éviter cela dans 99% des situations. (Sans oublier que le code ci-dessus a de toute façon une erreur, il devrait commencer par <%=, non <%.)
GMA
Pas le meilleur moyen. html ici devrait être généré par votre propre application et garanti pour être sûr. Il existe d'autres moyens plus efficaces dans les réponses ci-dessus.
Joshua Dance