在Rails应用程序中的ruby中,我构建了一个项目名称和项目ID值的数组,但想要截断名称的长度。当前的代码:如何...截断数组中的字符串
names = active_projects.collect {|proj| [proj.name, proj.id]}
我已经在努力将截断功能添加到块,但我得到了类错误未定义的方法。
在此先感谢 - 我只是不能包裹我的头呢。
在Rails应用程序中的ruby中,我构建了一个项目名称和项目ID值的数组,但想要截断名称的长度。当前的代码:如何...截断数组中的字符串
names = active_projects.collect {|proj| [proj.name, proj.id]}
我已经在努力将截断功能添加到块,但我得到了类错误未定义的方法。
在此先感谢 - 我只是不能包裹我的头呢。
假设我正确理解这个问题:
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]
}
太好了 - 我用过这个。 – ander163 2010-04-13 16:27:58
尝试以下
name=[]
active_projects.collect {|proj| name << [proj.name, proj.id]}
编辑了这个应该是
names= active_projects.collect {|proj| [proj.name.to_s[0..10], proj.id]}
在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]
}
该功能位于模型中,而不是视图中。我将你建议的行添加到project.rb文件中,但仍然得到与最初报告相同的错误。将项目名称(这是一个字符串)作为一个数组并将前n个字符拉到目前为止的简单方法。谢谢。 – ander163 2010-04-13 16:19:31
听起来像你在正确的轨道上。这可能是因为你只需要我的答案中的'include'来使'truncate'方法可用。 – mikej 2010-04-08 15:10:11