Использование gsub для замены конкретного символа новой строкой (Ruby, консоль Rails) - PullRequest
7 голосов
/ 10 октября 2009

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

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

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

>> s = Sample.find(:first)

=> ... подробности записи ...

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

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

>> s.save

=> true

>> reload!

Reloading

=> true

>> s = Sample.find(:first)

=> ... подробности записи ...

>> s.description

=> ... поле описания по-прежнему содержит точки с запятой, а не символы новой строки ...

AHHHHHH !!!!!!!

Ответы [ 2 ]

28 голосов
/ 10 октября 2009

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

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

s.description = s.description.gsub(/;/,"\n")
0 голосов
/ 11 октября 2009

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

...