我有这段代码
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 >
答案 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;上面没有什么不同)。