2012-07-03 27 views
16

Tôi đang cố gắng để có được điều này để làm việc:link_to trong helper với khối

link_to("#", class: "add_fields btn btn-success") do 
    name 
    content_tag(:i, "", :class => "icon-plus icon-white") 
end 

nhưng nó chỉ cho tôi thấy các biểu tượng theo quy định của i (twitter-bootstrap css) và không phải là văn bản trong name, những gì là Tôi làm sai?

Trả lời

26

Giá trị trả về của khối sẽ trở thành nội dung của nó. Chỉ dòng cuối cùng được trả lại.

Bạn phải nối hai dây cùng với + để tạo ra một giá trị trả về duy nhất:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white") 
end 

Bạn sẽ cần phải sử dụng html_safe để ngăn chặn các nội dung của thẻ của bạn tự động được mã hóa HTML:

link_to("#", class: "add_fields btn btn-success") do 
    name + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

Phát biểu từ trải nghiệm cá nhân với Twitter Bootstrap, tôi biết bạn sẽ cần một khoảng trống giữa namecontent_tag:

link_to("#", class: "add_fields btn btn-success") do 
    name + ' ' + content_tag(:i, "", class: "icon-plus icon-white").html_safe 
end 

Ngoài ra, nếu bạn đang ở trong một mẫu ERB, bạn có thể ra cả hai giá trị với <%=:

<%= link_to(...) do %> 
    <%= name %> 
    <%= content_tag(...) %> 
<% end %> 
+0

nếu im làm điều này cho thấy nút của tôi: 'foo ' – wintersolutions

+0

Bạn có thể sử dụng an toàn HTML để đánh dấu chuỗi của bạn như không đòi hỏi mã hóa HTML. – meagar

+4

Tôi đã thử nghiệm nó với html_safe quá và nó không hoạt động, nhưng điều này hoạt động: 'link_to (" # ", class:" add_fields btn btn-success ") làm (name + '' + content_tag (: i," ", : class => "icon-plus icon-white")) html_safe end' nếu bạn muốn bạn có thể cập nhật câu trả lời của bạn, cảm ơn bạn rất nhiều! – wintersolutions

2

Có hai điều tôi muốn xem xét:

1) Toàn bộ nội dung của khối link_to cần được khử trùng.

link_to("#", class: "add_fields btn btn-success") do 
    (name + content_tag(:i, "", class: "icon-plus icon-white")).html_safe 
end 

2) Chúng tôi có thể mong đợi đầu vào là nil?

Mọi thứ sẽ bị hỏng nếu chúng tôi gọi html_safe trên đối tượng nil. Sử dụng raw nếu có cơ hội điều này có thể xảy ra.

link_to("#", class: "add_fields btn btn-success") do 
    raw(name + content_tag(:i, "", class: "icon-plus icon-white")) 
end 

This là thông tin tốt về chủ đề này. My blog post trình bày một ứng dụng thú vị về điều này.

1

Đối với những người sử dụng phông chữ tuyệt vời hoặc cái gì khác, nó có thể không hiển thị biểu tượng. Nhưng giải pháp này hiệu quả.

link_to :sort => column, :direction => direction do 
    "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe 
end 
Các vấn đề liên quan