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.