pakeha
pakeha

Reputation: 2500

Using gsub to replace a particular character with a newline (Ruby, Rails console)

Annoying problem. I am trying to replace all semicolon characters in my Model's description field with newline characters (\n). The database is sqlite. The field is of type text.

If I do it manually at the rails console (manually typing the description for a single record using \n for line breaks), the rails console automatically escapes the \n, and the description field becomes filled with \\n.

If I do it programmatically using gsub, I get the following situation:

>> s = Sample.find(:first)

=> ...details of record ...

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

=> ...success - it all looks good, new lines in the returned value are represented by \n...

>> s.save

=> true

>> reload!

Reloading

=> true

>> s = Sample.find(:first)

=> ...details of record ...

>> s.description

=> ... the description field still has semicolons in it rather than newline characters ...

AHHHHHH!!!!!!!

Upvotes: 7

Views: 24111

Answers (2)

cldwalker
cldwalker

Reputation: 6175

If you're editing ActiveRecord fields a lot, you can just edit them in your editor with the rails plugin console_update

Upvotes: 0

Vincent Robert
Vincent Robert

Reputation: 36140

s.description returns a copy of the description so gsub! will only modify the copy and return the modified copy.

Try this:

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

Upvotes: 29

Related Questions