Como eu envolvo link_to em algum código ruby ​​html?

116

Como envolvo um link em torno do código de exibição? Não consigo descobrir como passar várias linhas com código Ruby para um único link_tométodo. O resultado que estou procurando é que você clique na coluna e obtenha a página de exibição:

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

Respostas:

269

link_to pega um bloco de código (> = Rails 2.2) que usará como corpo da tag.

Então você faz

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

Mas tenho certeza de que aninhar um divdentro de uma atag não é um HTML válido.

EDITAR: =personagem adicionado de acordo com o comentário de Amin Ariana abaixo.

Thorbjørn Hermansen
fonte
17
Este comentário é apenas uma referência: <a> <div> </div> </a> é válido em HTML5, mas não nas especificações HTML anteriores. Consulte stackoverflow.com/questions/796087/make-a-div-into-a-link para uma pergunta semelhante.
chucknelson
Rails 2.3.8 ainda está obtendo "erro de sintaxe inesperado ')'" usando a sintaxe acima.
daedelus_j
Se você tiver um caminho mais complexo, você pode apenas adicionar os parâmetros, faltando o conteúdo inicial, por exemplo, <% = link_to some_path, método:: post%>
Obromios
13

Além disso, isso pode ser um problema para alguns:

Certifique-se de escrever <%=se estiver fazendo um link simples com código em vez de <%.

por exemplo

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
sybohy
fonte
Eu acho que isso é necessário no Rails 3+
m33lky
8

Para versões mais antigas do Rails, você pode usar

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

Você pode usar link_tocom um bloco:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
fonte
3
link_to requer que '=' apareça (mesmo com um bloqueio)
Brandon
-2

Um pouco de atraso nesta resposta, eu sei - mas fui direcionado aqui hoje e não encontrei uma boa resposta. O seguinte deve funcionar:

<% link_to raw(html here), @album %>
Rob Dawson
fonte
5
Isso não deve ser usado, pois todo html inserido no rawestá sujeito a XSS.
Aurril de
Não necessariamente, pode ser o caso de o HTML estar sendo gerado de algum lugar dentro de seu próprio aplicativo que você sabe que é seguro. Ainda assim, é melhor evitar isso em 99% das situações. (Sem mencionar que o código acima contém um erro, ele deveria começar com <%=, não <%.)
GMA
Não é a melhor maneira. html aqui teria que ser gerado por seu próprio aplicativo e garantido para ser seguro. Existem outras maneiras melhores nas respostas acima.
Joshua Dance de