Rails截断数组中的字符串

时间:2015-02-26 23:36:23

标签: ruby-on-rails string truncate acts-as-taggable-on

在我的应用中,我试图截断显示的一串标签。我试过这样做:

<%= @medium.marker_list.map { |m| 
      link_to truncate('+ ' + m.titleize, length: 5), 
              :controller => "media", :action => "index", :media => m 
    }.join(' ').html_safe %>

问题是如果任何字符串大于5,它会用省略号替换整个字符串,而不是只替换长度超过设定长度的字符。

如何正确输出?

我通过act-as-taggable gem创建标记。

** 编辑 **

所以如果我有这样的标签列表:example, test, product, listing

它返回:..., test, ..., ...

应该返回此内容:examp...,test,produ..., listi...

2 个答案:

答案 0 :(得分:1)

试试这个:

%w(example test product listing).map { |w| w.size > 5 ? w[0,5] + "..." : w }

输出:

[examp..., test, produ..., listi...]

因此,在您的代码中,您可以像这样(未经测试)实现:

# Helper method
def truncate_tag(tag)
  tag.size > 5 ? tag[0,5] + "..." : tag
end

# View
<%= @medium.marker_list.map { |m|
    link_to truncate_tag(m.titleize),
    :controller => "media",
    :action => "index",
    :media => m
}.join(' ').html_safe %>

答案 1 :(得分:0)

如何使用简单的ruby解决方案

<%= @medium.marker_list.map { |m| 
      link_to "+ {m.titalize}".gsub("+ {m.titalize}"[5..-1],"..."), 
              :controller => "media", :action => "index", :media => m 
    }.join(' ').html_safe %>