Использование gsub для замены определенного символа на новую строку (Ruby, консоль Rails)

Раздражающая проблема. Я пытаюсь заменить все символы точки с запятой в поле описания моей модели символами новой строки (\n). База данных sqlite. Поле имеет текстовый тип.

Если я сделаю это вручную в консоли rails (вручную набрав описание для одной записи, используя \n для разрывов строк), консоль rails автоматически экранирует \n, а поле описания заполняется \\n.

Если я делаю это программно с помощью gsub, то получаю следующую ситуацию:

>> s = Sample.find(:first)

=> ...детали записи ...

>> s.description.gsub!(/;/,"\n")

=> ...успех - все выглядит хорошо, новые строки в возвращаемом значении представлены \n...

>> s.save

=> true

>> reload!

Reloading

=> true

>> s = Sample.find(:first)

=> ...детали записи ...

>> s.description

=> ... в поле описания все еще есть точки с запятой, а не символы новой строки ...

ААААААААААААААААААААААААААААААААААААААААААА!!!!!!


person pakeha    schedule 10.10.2009    source источник
comment
Вы уверены, что всегда получаете один и тот же образец? Что говорят журналы?   -  person Ryan Bigg    schedule 11.10.2009


Ответы (2)


s.description возвращает копию описания, поэтому gsub! только изменит копию и вернет измененную копию.

Попробуй это:

s.description = s.description.gsub(/;/,"\n")
person Vincent Robert    schedule 10.10.2009
comment
Он использует gsub! который изменит описание на месте и сохранит его. - person Ryan Bigg; 11.10.2009
comment
Я тоже так думал, Радар. Однако решение Винсента, кажется, работает. Использование деструктивного варианта gsub у меня не сработало. Поле не было изменено после выполнения сохранения. Я работал в консоли рельсов, если это имеет значение. - person pakeha; 11.10.2009

Если вы часто редактируете поля ActiveRecord, вы можете просто редактировать их в своем редакторе с помощью плагина rails console_update< /а>

person cldwalker    schedule 11.10.2009