2012-03-10 18 views
8

Hi Tôi có một câu hỏi noob, tôi muốn tạo ra kết quả HTML sau:đường ray 3 link_to với lồng nhau content_tag để tạo <a href với khoảng lồng nhau - làm cách nào?

<a href="/controller/action" class="button-big layer">TEXT<span class="arrow-big"></span></a> 

Trong HTML trên, chúng tôi muốn có văn bản với một nhịp lớp phong cách trong một hình ảnh qua css.

Khi tôi cố gắng triển khai sau kết quả phản ánh chỉ là một phần của việc thực hiện cần thiết:

<%= link_to "TEXT", controller_path, :class => "button-big layer" %> 

kết quả trong:

<a href="/controller/action" class="button-big layer">TEXT</a> 

<%= link_to(content_tag(:span, "", :class => "arrow-big"), controller_path, :class => "button-big layer") %> 

kết quả trong:

<a href="/controller/action" class="button-big layer"><span class="arrow-big"></span></a> 

Có ai biết cách thực hiện không?

Trả lời

10

Đơn giản chỉ cần nối văn bản của bạn với 'tuổi':

<%= link_to(("TEXT" + content_tag(:span, "", :class => "arrow-big")).html_safe, 
      controller_path, 
      :class => "button-big layer") %> 

Bạn sẽ cần .html_safe quanh nối từ các nhà điều hành + khác sẽ thoát khỏi mã HTML của content_tag.

+0

Xin chào, hãy làm tốt, đây chính xác là những gì tôi đang tìm kiếm. Làm việc như mong đợi mà không có bất kỳ thay đổi trong css, nhờ giải pháp của bạn :-) – user1260945

+0

Điều này làm việc tuyệt vời, tôi đảo ngược văn bản và content_tag cho nhu cầu của tôi, nhưng nó đã được chính xác những gì tôi đang tìm kiếm. –

28

Bạn cũng có thể tag tổ bằng cách sử dụng cú pháp thay thế cho link_to helper

<%= link_to controller_path, :class=> "button-big layer" do %> 
    Text 
    <%= content_tag(:span, "", :class => "arrow_big" %> 
<% end %> 
+0

Xin chào, cảm ơn vì giải pháp của bạn, công trình cũng như giải pháp khác với "khoảng cách" litte. Kiểu css cho "hình ảnh" được chèn bởi thẻ span phải được điều chỉnh bởi vì một ngắt được chèn vào. Nhưng đó không phải là điều lớn, cũng được thực hiện! – user1260945

+0

Thật tuyệt vời khi không ai có thể nói về tùy chọn khối của 'link_to' và' content_tag'. Nó như thể không ai cần phải làm tổ, hoặc không ai sử dụng haml, nơi mà nội dung làm tổ là rất cồng kềnh. Câu trả lời tuyệt vời, tốt để biết điều này là có thể với 'link_to', cũng như' content_tag' – ahnbizcad

+0

được tìm kiếm này cho yonks.Đã không hiểu từ tài liệu mà link_to có thể chạy một tùy chọn khối – Jerome

2

Dưới đây là một cách khác để bạn có thể sử dụng mà không có sự content_tag. Không phải là sạch nhất nhưng nó hoạt động!

<%= link_to '<span class="arrow_big"></span>'.html_safe, controller_path, class: "button-big layer" %> 
1

Đọc câu hỏi của bạn Tôi đã giải quyết được vấn đề của mình. Tôi đề xuất một cách khác để trả lời câu hỏi của bạn.

Bạn có thể tạo phương thức trợ giúp để tạo loại liên kết mà bạn cần. Nó sẽ giống như thế này

def link_with_text_and_span(href, text, span_options= {}, link_options = {}) 
    span_tag = content_tag(:span, span_options[:content] || '', :class => span_options[:class] || '') 
    link_to(span_tag, href, :class => link_options[:class] || '') 
    end 

Điều tốt về quan điểm của bạn sẽ sạch hơn. Sau đó, bạn chỉ có thể gọi phương thức helper này theo quan điểm của bạn

<%= link_with_text_and_span("/controller/action", "TEXT", {class: 'arrow-big'}, class: button-big) %> 

PS: Mã này có thể được cải thiện chắc chắn, nếu người dùng khác muốn, xin vui lòng làm điều đó.