Как мне ... усечь строку в массиве - PullRequest
2 голосов
/ 08 апреля 2010

В приложении ruby ​​on rails я создаю массив имен проектов и значений идентификаторов проектов, но хочу обрезать длину имен. Текущий код:

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

Я пытался добавить функцию усечения в блок, но получаю неопределенный метод для ошибки класса.

Заранее спасибо - я просто пока не могу обернуться.

Ответы [ 3 ]

1 голос
/ 08 апреля 2010

Если я правильно понял вопрос:

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]
}
1 голос
/ 08 апреля 2010

Попробуйте подписку

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

отредактировано это должно быть

names= active_projects.collect {|proj|  [proj.name.to_s[0..10], proj.id]}
0 голосов
/ 08 апреля 2010

В приложении Rails для этого вы можете использовать метод усечение .

Если ваш код не отображается, вам нужно включить модуль 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]
}
...