Làm cách nào để bọc link_to xung quanh một số mã ruby ​​html?


116

Làm cách nào để đặt một liên kết quanh mã chế độ xem? Tôi không thể tìm ra cách chuyển nhiều dòng có mã ruby ​​sang một link_tophương thức duy nhất . Kết quả tôi đang tìm là bạn nhấp vào cột và nhận được trang hiển thị:

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

Câu trả lời:


269

link_to lấy một khối mã (> = Rails 2.2) mà nó sẽ sử dụng làm phần thân của thẻ.

Bạn cũng vậy

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

Nhưng tôi khá chắc chắn rằng việc lồng divmột athẻ bên trong thẻ không phải là HTML hợp lệ.

CHỈNH SỬA: Đã thêm =nhân vật theo nhận xét của Amin Ariana bên dưới.


17
Nhận xét này chỉ là một tham chiếu: <a> <div> </div> </a> hợp lệ trong HTML5, nhưng không hợp lệ trong các thông số kỹ thuật HTML trước đó. Xem stackoverflow.com/questions/796087/make-a-div-into-a-link để biết câu hỏi tương tự.
chucknelson

Rails 2.3.8 vẫn nhận được "lỗi cú pháp, không mong muốn ')'" bằng cách sử dụng cú pháp trên.
daedelus_j

Nếu bạn có một đường dẫn phức tạp hơn, bạn có thể chỉ cần thêm các tham số, thiếu nội dung ban đầu, ví dụ: <% = link_to some_path, method:: post%>
Obromios

13

Ngoài ra, đây có thể là vấn đề đối với một số:

Đảm bảo viết <%=nếu bạn đang thực hiện một liên kết đơn giản với mã trong đó thay vì viết <%.

ví dụ

<%= link_to 'some_controller_name/some_get_request' do %>
  Hello World
<% end  %>

Tôi nghĩ rằng đây là cần thiết trong Rails 3+
m33lky

8

Đối với các phiên bản Rails cũ hơn, bạn có thể sử dụng

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

6

Bạn có thể sử dụng link_tovới một khối:

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

3
link_to yêu cầu '=' hiển thị (ngay cả với một khối)
Brandon

-2

Tôi biết câu trả lời này có một chút trễ - nhưng hôm nay tôi đã được hướng dẫn đến đây và không tìm thấy câu trả lời hay. Những điều sau sẽ hoạt động:

<% link_to raw(html here), @album %>

5
Điều này không nên được sử dụng vì tất cả html được nhập bên trong rawdễ bị XSS.
Aurril

Không nhất thiết, có thể xảy ra trường hợp HTML được tạo từ một nơi nào đó trong ứng dụng của riêng bạn mà bạn biết là an toàn. Tuy nhiên, tốt nhất bạn nên tránh điều này trong 99% trường hợp. (Chưa kể các mã trên có một sai lầm dù sao, nó nên bắt đầu với <%=, không <%.)
GMA

Không phải là cách tốt nhất. html ở đây sẽ phải được tạo bởi ứng dụng của riêng bạn và được đảm bảo an toàn. Có những cách khác tốt hơn trong các câu trả lời ở trên.
Joshua Dance
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.