【问题标题】:Rails truncate strings in an arrayRails 截断数组中的字符串
【发布时间】:2015-04-29 13:34:29
【问题描述】:

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

<%= @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

它返回这个:..., test, ..., ...

什么时候应该返回这个:examp...,test,produ..., listi...

【问题讨论】:

  • 请提供标签示例列表、您获得的输出以及您期望的输出。

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


【解决方案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 %>

【讨论】:

  • 不错的答案,但我认为应该是 w.size &gt; 5 否则五个字母的单词也会有省略号。 (“面包”变成“面包……”)
  • 如何在我的link_to 中使用它?我这样做了&lt;%= medium.marker_list.map { |m| link_to '+ ' + m.titleize, {:controller =&gt; "media", :action =&gt; "index", :media =&gt; m}, m.size &gt; 5 ? m[0,5] + "..." : m }.join(' ').html_safe %&gt;,但它抛出了这个错误:undefined method 'stringify_keys' for "examp...":String
【解决方案2】:

想要一个简单的红宝石解决方案怎么样

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多