我如何...截断数组中的字符串

时间:2010-04-08 14:21:08

标签: ruby truncate

在ruby on rails应用程序中,我构建了一个项目名称和项目ID值的数组,但是想要截断名称的长度。目前的代码是:

names  = active_projects.collect {|proj| [proj.name, proj.id]}

我试图在块中添加truncate函数,但是我发现了类错误的未定义方法。

提前致谢 - 我还是无法解决这个问题。

3 个答案:

答案 0 :(得分:1)

尝试以下

name=[]
active_projects.collect {|proj| name << [proj.name, proj.id]}

编辑这应该是

names= active_projects.collect {|proj|  [proj.name.to_s[0..10], proj.id]}

答案 1 :(得分:1)

假设我正确理解了这个问题:

max_length = 10 # this is the length after which we will truncate
names = active_projects.map { |project|
  name = project.name.to_s[0..max_length] # I am calling #to_s because the question didn't specify if project.name is a String or not
  name << "…" if project.name.to_s.length > max_length # add an ellipsis if we truncated the name
  id = project.id
  [name, id]
}

答案 2 :(得分:0)

在Rails应用程序中,您可以使用truncate方法。

如果您的代码不在视图中,那么您需要包含TextHelper模块才能使该方法可用:

include ActionView::Helpers::TextHelper
然后你可以这样做:

names = active_projects.collect { |proj| [truncate(proj.name), proj.id] }

默认行为是截断为30个字符,并将删除的字符替换为“...”,但可以按如下方式覆盖:

names = active_projects.collect {
  # truncate to 10 characters and don't use '...' suffix
  |proj| [truncate(proj.name, :length => 10, :omission => ''), proj.id]
}