使用gsub用换行符替换特定字符(Ruby,Rails控制台)

pak*_*eha 7 ruby string newline ruby-on-rails gsub

恼人的问题.我试图用换行符(\n)替换模型的描述字段中的所有分号字符.数据库是sqlite.该字段是文本类型.

如果我在rails控制台上手动执行此操作(使用\n为换行符键入单个记录的描述),则rails控制台会自动转义\n,并且说明字段将被填充\\n.

如果我使用gsub以编程方式执行此操作,则会出现以下情况:

>> s = Sample.find(:first)
Run Code Online (Sandbox Code Playgroud)

=> ...记录的详细信息......

>> s.description.gsub!(/;/,"\n")
Run Code Online (Sandbox Code Playgroud)

=> ...成功 - 一切看起来都不错,返回值中的新行由\n表示...

>> s.save

=> true

>> reload!

Reloading

=> true

>> s = Sample.find(:first)
Run Code Online (Sandbox Code Playgroud)

=> ...记录的详细信息......

>> s.description
Run Code Online (Sandbox Code Playgroud)

=> ...描述字段中仍然有分号而不是换行符...

AHHHHHH !!!!!!!

Vin*_*ert 28

s.description返回描述的副本,因此gsub!只会修改副本并返回修改后的副本.

试试这个:

s.description = s.description.gsub(/;/,"\n")
Run Code Online (Sandbox Code Playgroud)

  • 这也是我的想法,雷达.然而,文森特的解决方案似乎有效.使用gsub的破坏性变体对我不起作用.执行保存后,该字段未经修改.我在rails控制台工作,如果这有所作为. (2认同)