2012-03-10 64 views
8

您好我有一個小白的問題,我想創建下面的HTML結果:rails 3 link_to與嵌套content_tag創建<href與嵌套跨度 - 如何?

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

在上面的HTML我想有通過CSS翼展類風格的圖像中的文本。

當我嘗試以下方法實現的結果反映只是一個需要實現的一部分:

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

結果:

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

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

結果:

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

有誰知道如何完成?

回答

10

簡單地用「跨度」串聯文本:

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

你需要周圍的級聯的.html_safe因爲+操作,否則將難逃content_tag的HTML。

+0

嗨,沒錯,這正是我正在尋找的。按預期工作,沒有任何變化的CSS,感謝您的解決方案:-) – user1260945 2012-03-10 18:55:34

+0

這很好,我把我的需要的文本和content_tag顛倒過來,但它正是我所期待的。 – 2014-05-14 20:40:08

28

您可以通過使用替代語法的link_to助手

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

嗨,感謝您的解決方案,以及另一個與litte「差距」。由span插入的「圖像」的CSS樣式必須被調整,因爲插入了中斷。但那不是什麼大事,幹得好! – user1260945 2012-03-10 18:56:58

+0

令人驚訝的是,似乎沒有人談論'link_to'和'content_tag'的塊選項。就好像沒有人需要嵌套,或者沒有人使用haml,嵌套內容非常麻煩。很好的回答,很高興知道這可以用'link_to',以及'content_tag' – ahnbizcad 2014-08-15 04:08:54

+0

一直在爲yonks尋找這個。沒有從文檔中瞭解到link_to可以運行阻止選項 – Jerome 2015-09-06 12:49:27

2

還巢標籤這裏的另一種方式,你可以在沒有content_tag使用。不是最乾淨的,但它的工作原理!

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

讀你的問題我確實解決了我的問題。 比我提出了另一種方式來回答你的問題。

你可以創建一個輔助方法來創建你需要的這種鏈接。 這將是這樣的

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 

好它是你的看法會更乾淨。 然後,你可以調用這個輔助方法,在你看來

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

PS:此代碼可以肯定地得到改善,如果其他用戶想請做到這一點。