link_to in helper with block

时间:2012-07-03 18:35:44

标签: ruby-on-rails forms twitter-bootstrap

我正试图让它发挥作用:

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

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

3 个答案:

答案 0 :(得分:28)

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

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

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的经验,我知道您需要namecontent_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 %>

答案 1 :(得分: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

This是关于这个主题的好读物。 My blog post提出了一个有趣的应用。

答案 2 :(得分:1)

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

link_to :sort => column, :direction => direction do
   "#{title} #{content_tag(:i, "", class: "fa fa-chevron-up") }".html_safe
end