19

我试图让它工作:

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

但它只显示由i(twitter-bootstrap css) 指定的图标,而不是中的文本name,我做错了什么?

4

3 回答 3

30

块的返回值成为它的内容。只返回最后一行。

您必须将两个字符串连接在一起+以产生单个返回值:

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

您需要使用html_safe来防止标签的内容自动被 HTML 编码:

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

根据 Twitter Bootstrap 的个人经验,我知道您需要在name和之间留一个空格content_tag

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

或者,如果您在 ERB 模板中,则可以使用以下命令输出这两个值<%=

<%= link_to( ... ) do %>
  <%= name %>
  <%= content_tag( ... ) %>
<% end %>
于 2012-07-03T18:36:54.547 回答
2

我会考虑两件事:

1)link_to需要对块的全部内容进行清理。

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

2)我们可以期望输入是nil

html_safe如果我们调用一个nil对象,事情就会中断。raw如果有可能发生这种情况,请使用。

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

是一个很好的阅读主题。我的博客文章介绍了一个有趣的应用。

于 2015-03-13T03:02:39.427 回答
1

对于那些使用 font-awesome 或其他东西的人,它可能不会显示图标。但这个解决方案奏效了。

link_to :sort => column, :direction => direction do
   "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe
end
于 2016-07-11T11:13:23.650 回答