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>

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.


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

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

6

Anda dapat menggunakan link_todengan satu blok:

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.