【问题标题】:Change all   to normal blank space Ruby将所有更改为普通空格 Ruby
【发布时间】:2018-01-09 18:32:52
【问题描述】:

如何从 Rails 控制台将所有   转换为普通空格?我有一个名为 Course 的模型,并希望将每个具有   的课程替换为使用正常空白而不是不间断空格的课程。

到目前为止,我已经在控制台中尝试了这些:

courses = Course.all
courses.each { |course| course.gsub!(/\302\240/," ")}

courses = Course.all
courses.each {|course| course.shortname.gsub!(/ /i," ")}

重新启动我的 Rails 服务器后,似乎仍然没有发生更改。我是否忽略了一个简单的错误。看起来这些更改要么一开始就不起作用,要么没有保存。

【问题讨论】:

  • 您更改课程后并未保存课程。试试course.shortname.gsub!(/ /i," "); course.save!
  • 嗯。这似乎不太奏效。我查看了 UTF-8 编码,想用 \x20 替换 \xC2\xA0。知道这将如何与 gsub 一起使用吗?

标签: ruby-on-rails ruby utf-8 console


【解决方案1】:

是的,您的更改一开始就不起作用,因为您使用了错误的模式,您应该在特殊字符之前添加一个“\”,在您的情况下是“&”。

所以试试这个:

courses = Course.all
courses.each {|course| course.shortname.gsub!(/\ /," ")}

&nbspASCII code 160 相同,所以

courses = Course.all
courses.each {|course| course.shortname.gsub!(160.chr("UTF-8")," ")}

在尝试时,我注意到 &nbsp 与“\u00A0”相同,因为“\u00A0”:String 的未定义方法 `html' 出现错误。我不知道它是什么,但这也可能有效,

courses = Course.all
courses.each {|course| course.shortname.gsub!("/\u00a0/", "")}

【讨论】:

  • @Jack 请让我知道我的分析器是否通过接受和投票来帮助你,
  • 为简洁起见,我在编辑后接受了您的回答。
【解决方案2】:

您没有保存课程。试试:

Course.all.each do |course|
  course.shortname.gsub!(/ /i," ")
  course.save!
end

【讨论】:

  • 它抛出错误NoMethodError: undefined method 'save!' for nil:NilClass 并说'block in irb_binding'
  • 抱歉,gsub! 本身不会返回 course,所以这是错误的。我已经更新了。
  • 它似乎仍然无法正常工作。除了.save! 之外,我还需要做什么来改变数据库吗?另外,有没有办法查看 UTF-8 编码的测试结果。例如,如果我要在“MATH 231”课程中尝试这个,我可以让它以正常的 UTF 编码返回 \x4D\x41\x54\x48\x20\x32\x33\x31 吗?
猜你喜欢
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 2015-03-11
  • 1970-01-01
  • 2022-06-28
  • 2011-01-07
相关资源
最近更新 更多