2012-03-10 62 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:此代码可以肯定地得到改善,如果其他用户想请做到这一点。