Ruby gsub没有替换换行符

时间:2015-07-02 20:41:18

标签: ruby-on-rails ruby ruby-on-rails-3 replace gsub

我有这段代码

str = @universal_claim_form.errors.full_messages.join
        str.gsub('Patient Contact Information: Value', 'Patient phone number') if str =~ /Patient Contact Information/
        debugger
        str.gsub("\\n", "<br/>")
        debugger
        flash.now[:error] = "Form has errors and was unable to be submitted.<br/> " << str

第一个gsub替换了不需要的消息,第二个gsub意味着用html换行替换所有换行符

在第一个调试器行str = "PMP Validation failed. This happens when something you entered does not pass PMP specific validations.\\nPatient phone number: Value must be a 10 digit number"

并且在第二个调试器中该行未更改

更奇怪的是,我在命令行中使用irb执行此操作并且工作正常

2.1.1 :001 > s = 'test'
 => "test"
2.1.1 :002 > s
 => "test"
2.1.1 :003 > s += '\ntest'
 => "test\\ntest"
2.1.1 :004 > s.gsub('\\n', '<br/>')
 => "test<br/>test"
2.1.1 :005 >

1 个答案:

答案 0 :(得分:4)

您可以调用gsub!来改变您调用它的字符串(而不是返回一个新字符串)。

gsub&#34;工作的原因&#34;在irb中是因为它输出结果 - irb不做任何赋值或变异(超出输入的范围),例如。

irb(main):001:0> foo = 4
=> 4
irb(main):002:0> foo + 6
=> 10

foo正在分配4,因此它会输出该分配的结果,同样foo + 6会输出结果,但foo的值不变。

当你致电gsub时,它会返回带有替换的 new 字符串,这就是为什么你觉得它&#34;工作&#34;在irb(这与印刷&#34; 4&#34;上面没有什么不同)。