2012-04-17 3 views
1

Как заменить тире пробелами & символы подчеркивания с запятыми в то же время?Как заменить тире пространством из массива

Я смог заменить символы подчеркивания запятыми, но когда я снова попытался повторить массив, это дало некоторые напуганные результаты.

Контроллер

def activity_by_all_city 
     @cities = ['Abilene_Texas','Akron_Ohio','Albuquerque_New-Mexico','Baton-Rouge_Louisiana'] 
    end 

Посмотреть

<% @cities.each do |city|%> 
    <%= link_to city.gsub!(/_/, ', '), 'activities-'+city.parameterize %><br> 
<% end %> 

ответ

2

Try:

<%= link_to city.replace(city.gsub(/-/, ' ').gsub(/_/, ', ')), 'activities-'+city.parameterize %><br> 

Дает:

<a href="activities-albuquerque-new-mexico">Albuquerque, New Mexico</a> 
3

Вы можно использовать String#tr заменить набор символов с другой:

@cities.collect {|city| city.tr('-_', ' ,') } 
=> ["Abilene,Texas", "Akron,Ohio", "Albuquerque,New Mexico", "Baton Rouge,Louisiana"] 

выше будет создать новый список, сохраняя оригинальные @cities строки нетронутыми. Если вы используете деструктивную версию (! Строка # тр), строки будут изменены на месте, что делает @cities держать переведенные названия городов:

@cities.each {|city| city.tr!('-_', ' ,') } 
=> ["Abilene,Texas", "Akron,Ohio", "Albuquerque,New Mexico", "Baton Rouge,Louisiana"] 
@cities 
=> ["Abilene,Texas", "Akron,Ohio", "Albuquerque,New Mexico", "Baton Rouge,Louisiana"] 

(Этот принцип применит ко всем «деструктивным» методам, а также gsub! , они изменяют объект, к которому они применяются.)

+1

Автор попытался заменить пробелы на «,» (запятая + пробел). Я думаю, это не подходит для метода 'tr'. – jdoe

+0

Правда. Я не рассматривал этот вопрос таким образом, но если это то, что было предназначено, вы, конечно, правы. –

Смежные вопросы