Bagaimana cara membungkus link_to di sekitar beberapa kode ruby ​​html?

116

Bagaimana cara menggabungkan tautan di sekitar kode tampilan? Saya tidak tahu cara melewatkan beberapa baris dengan kode ruby ​​ke satu link_tometode. Hasil yang saya cari adalah Anda mengklik kolom dan mendapatkan halaman pertunjukan:

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

Jawaban:

271

link_to mengambil blok kode (> = Rails 2.2) yang akan digunakan sebagai badan tag.

Jadi, kamu lakukan

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

Tapi saya yakin bahwa menumpuk divdi dalam atag bukanlah HTML yang valid.

EDIT: Menambahkan =karakter sesuai komentar Amin Ariana di bawah ini.

Thorbjørn Hermansen
sumber
17
Komentar ini hanyalah referensi: <a> <div> </div> </a> valid di HTML5, tetapi tidak di spesifikasi HTML sebelumnya. Lihat stackoverflow.com/questions/796087/make-a-div-into-a-link untuk pertanyaan serupa.
chucknelson
Rails 2.3.8 masih mendapatkan "kesalahan sintaks, tidak terduga ')'" menggunakan sintaks di atas.
daedelus_j
Jika Anda memiliki jalur yang lebih kompleks, Anda dapat menambahkan parameter, tanpa konten awal, misalnya <% = link_to some_path, metode:: post%>
Obromios
13

Selain itu, ini mungkin menjadi masalah bagi beberapa orang:

Pastikan untuk menulis <%=jika Anda membuat tautan sederhana dengan kode di dalamnya, bukan<% .

misalnya

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>
sybohy
sumber
Saya pikir ini diperlukan di Rails 3+
m33lky
8

Untuk versi Rails yang lebih lama, Anda dapat menggunakan

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

Anda dapat menggunakan link_todengan satu blok:

<% link_to(@album) do %>
    <!-- insert html etc here -->
<% end %>
Barry Gallagher
sumber
3
link_to membutuhkan '=' untuk muncul (bahkan dengan blok)
Brandon
-2

Sedikit keterlambatan pada balasan ini yang saya tahu - tetapi saya diarahkan ke sini hari ini, dan tidak menemukan jawaban yang bagus. Berikut ini seharusnya bekerja:

<% link_to raw(html here), @album %>
Rob Dawson
sumber
5
Ini tidak boleh digunakan karena semua html yang dimasukkan di dalam rawrentan terhadap XSS.
Aurril
Belum tentu, mungkin saja HTML dibuat dari suatu tempat dalam aplikasi Anda sendiri yang Anda tahu aman. Namun, yang terbaik adalah menghindari ini dalam 99% situasi. (Belum lagi kode di atas memiliki kesalahan, itu harus dimulai dengan <%=, tidak <%.)
GMA
Bukan cara terbaik. html di sini harus dibuat oleh aplikasi Anda sendiri dan dipastikan aman. Ada cara lain yang lebih baik untuk menjawab di atas.
Joshua Dance