我目前在 View 中有以下代码(jQuery),并且当title具有\ n字符时,它将破坏我的js。

$("#t").html("#{title.html_safe}");

下面的作品,但我认为这是一个hack:
$("#t").html("#{title.gsub("\n","")}");

最佳答案

您正在寻找的方法是String#chomp。它将删除字符串末尾的所有回车符。

$("#t").html("#{title.chomp}");

与往常一样,仅在完全确定html_safe变量安全的情况下才使用title ...尤其是因为您正在Javascript文件中使用它!我没有在代码示例中包含它,因为我无法带自己去做。另外,有关在可能是html_safe的变量上使用nil的信息,请参阅APIdock上的注释。我建议仅在字符串文字上使用它。

编辑:

如果您的title有可能包含在Java语言中使用之前需要转义的引号(例如'"Winter is Coming", I say',它将作为.html(""Winter is Coming", I say");插入到您的JavaScript中),那么您还应该使用@mu也建议使用 escape_javascript 方法简短提供。
$("#t").html("#{j(title.chomp)}");

如果是title = '"Winter is Coming"',则将产生以上代码。
$("#t").html("\"Winter is Coming\"");

如果在标题字符串的中间还有回车的可能,那么String#gsub是可行的方法。
$("#t").html("#{j(title.gsub(/[\n\r]/, " "))}");

我在gsub的第二个参数中添加了一个空格,以便'Winter\nis\nComing'成为'Winter is Coming'而不是'WinterisComing'

10-06 12:52