2010-04-08 9 views
2

Dans une application ruby ​​on rails, je crée un tableau de noms de projet et de valeurs d'ID de projet, mais je souhaite tronquer la longueur des noms. Code actuel est:Comment ... tronquer une chaîne dans un tableau

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

J'ai essayé d'ajouter une fonction de troncature au bloc, mais je obtenir méthode non définie pour erreur de classe.

Merci d'avance - Je ne peux pas encore en dire plus.

+0

On dirait que vous êtes sur la bonne voie. Il se peut que vous ayez juste besoin du 'include' de ma réponse pour rendre la méthode' truncate' disponible. – mikej

Répondre

1

En supposant que je compris la question:

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] 
} 
+0

Super - je l'ai utilisé. – ander163

1

Essayez de suivre

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

ÉDITÉE cela devrait être

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

Cela ressemble à concaténer les chaînes, pas les tronquer. – pkaeding

+0

en fait, il fait exactement la même chose que l'OP, seulement pire et sémantiquement faux. –

+0

il produira o/p comme name = [['salil', 1], ['ander', '2']]. pas de vérification bien. – Salil

0

Dans une application Rails, vous pouvez utiliser la méthode truncate pour cette .

Si votre code n'est pas en vue, alors vous devrez inclure le module TextHelper afin de rendre la méthode disponible:

include ActionView::Helpers::TextHelper 

vous pouvez faire:

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

Le le comportement par défaut est de tronquer à 30 caractères et de remplacer les caractères supprimés par '...' mais cela peut être remplacé comme suit:

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

La fonction était dans le modèle, pas dans une vue. J'ai ajouté la ligne que vous avez suggérée au fichier project.rb, mais vous obtenez toujours la même erreur que celle signalée à l'origine. La méthode la plus simple de traiter le nom du projet (qui est une chaîne) en tant que tableau et en tirant seulement les n premiers caractères fonctionne pour le moment. Merci. – ander163

Questions connexes