的link_to与块帮手(link_to in helper with block)

2019-07-30 05:21发布

我试图让这个工作:

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

但它只能说明我所指定的图标i (Twitter的引导CSS),而不是在文本name ,我究竟做错了什么?

Answer 1:

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

你必须连同串联两个字符串+产生一个返回值:

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的引导个人的经验来说,我知道你会需要之间的空间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 %>


Answer 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

这是关于这个问题的一个很好的阅读。 我的博客文章提出了这样一个有趣的应用。



Answer 3:

对于那些使用字体真棒或别的东西可能不会显示图标。 但这种解决方案工作。

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


文章来源: link_to in helper with block