Jak zawinąć link_to wokół jakiegoś rubinowego kodu HTML?

116

Jak zawinąć link wokół kodu widoku? Nie mogę dowiedzieć się, jak przekazać wiele wierszy z kodem ruby ​​do jednej link_tometody. Wynik, którego szukam, to kliknięcie kolumny i wyświetlenie strony programu:

<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
źródło

Odpowiedzi:

270

link_to pobiera blok kodu (> = Rails 2.2), którego użyje jako treść znacznika.

Więc masz

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

Ale jestem całkiem pewien, że zagnieżdżenie divwewnątrz atagu nie jest poprawnym kodem HTML.

EDYCJA: Dodano =postać w komentarzu Amina Ariany poniżej.

Thorbjørn Hermansen
źródło
17
Ten komentarz jest tylko odniesieniem: <a> <div> </div> </a> jest poprawny w HTML5, ale nie we wcześniejszych specyfikacjach HTML. Zobacz podobne pytanie na stackoverflow.com/questions/796087/make-a-div-into-a-link .
chucknelson
Railsy 2.3.8 nadal otrzymują komunikat „błąd składni, nieoczekiwany ')'” przy użyciu powyższej składni.
daedelus_j
Jeśli masz bardziej złożoną ścieżkę, możesz po prostu dodać parametry, brakuje początkowej zawartości, np. <% = Link_to some_path, metoda:: post%>
Obromios
13

Może to również stanowić problem dla niektórych:

Pamiętaj, aby napisać, <%=jeśli robisz prosty link z kodem zamiast <%.

na przykład

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
sybohy
źródło
Myślę, że jest to wymagane w Railsach 3+
m33lky
8

W przypadku starszych wersji Railsów możesz użyć

<% content_tag(:a, :href => foo_path) do %>
  <span>Foo</span>
<% end %>
Omar Qureshi
źródło
6

Możesz użyć link_toz blokiem:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
źródło
3
link_to wymaga, aby pojawił się znak „=” (nawet z blokadą)
Brandon,
-2

Wiem, że ta odpowiedź jest trochę opóźniona - ale skierowano mnie tutaj dzisiaj i nie znalazłem dobrej odpowiedzi. Powinno działać:

<% link_to raw(html here), @album %>
Rob Dawson
źródło
5
Nie należy tego używać, ponieważ cały kod HTML wprowadzony wewnątrz rawjest podatny na XSS.
Aurril
Niekoniecznie, może się zdarzyć, że kod HTML jest generowany z dowolnego miejsca w Twojej aplikacji, o której wiesz, że jest bezpieczna. Mimo to najlepiej jest tego unikać w 99% sytuacji. (Nie wspominając o tym, że powyższy kod i tak zawiera błąd, powinien zaczynać się od <%=, nie <%.)
GMA
Nie jest to najlepszy sposób. html musiałby być wygenerowany przez twoją własną aplikację i zabezpieczony. Powyższe odpowiedzi mają inne lepsze sposoby.
Joshua Dance