Rails 截断数组中的字符串
Rails truncate strings in an array
在我的应用程序中,我试图截断显示的标签字符串。我试过这样做:
<%= @medium.marker_list.map { |m|
link_to truncate('+ ' + m.titleize, length: 5),
:controller => "media", :action => "index", :media => m
}.join(' ').html_safe %>
问题是,如果任何字符串大于 5,它会用省略号替换整个字符串,而不是只替换比设置长度长的字符。
如何才能正确输出?
我正在通过 acts-as-taggable 创建标签 gem。
** 编辑 **
所以如果我有这样的标签列表:example, test, product, listing
它returns这个:..., test, ..., ...
什么时候应该返回这个:examp...,test,produ..., listi...
寻求一个简单的 ruby 解决方案如何
<%= @medium.marker_list.map { |m|
link_to "+ {m.titalize}".gsub("+ {m.titalize}"[5..-1],"..."),
:controller => "media", :action => "index", :media => m
}.join(' ').html_safe %>
试试这个:
%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 %>
在我的应用程序中,我试图截断显示的标签字符串。我试过这样做:
<%= @medium.marker_list.map { |m|
link_to truncate('+ ' + m.titleize, length: 5),
:controller => "media", :action => "index", :media => m
}.join(' ').html_safe %>
问题是,如果任何字符串大于 5,它会用省略号替换整个字符串,而不是只替换比设置长度长的字符。
如何才能正确输出?
我正在通过 acts-as-taggable 创建标签 gem。
** 编辑 **
所以如果我有这样的标签列表:example, test, product, listing
它returns这个:..., test, ..., ...
什么时候应该返回这个:examp...,test,produ..., listi...
寻求一个简单的 ruby 解决方案如何
<%= @medium.marker_list.map { |m|
link_to "+ {m.titalize}".gsub("+ {m.titalize}"[5..-1],"..."),
:controller => "media", :action => "index", :media => m
}.join(' ').html_safe %>
试试这个:
%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 %>