【发布时间】:2011-11-18 21:30:38
【问题描述】:
我正在使用 Rails 3.1.1 和 Ruby 1.9.2。我正在将数据库从 Ruby 1.8.7 环境迁移到 Ruby 1.9 环境,并希望执行以下迁移:
# coding: utf-8
class CleanseVerses < ActiveRecord::Migration
def up
Poem.all.each do |vs|
cleansed_text = String.new
cleansed_text = vs.text
cleansed_text.gsub!('—', '—')
cleansed_text.gsub!(' - ', ' — ')
cleansed_text.gsub!('’', '’')
cleansed_text.gsub!('“', '“')
cleansed_text.gsub!('â€', '”')
cleansed_text.gsub!('prince', 'king')
vs.text = cleansed_text
vs.save
end
end
def down
end
end
问题是数据库似乎没有反映任何更改。即使是简单的“王子”到“国王”的转换也不起作用。
我确实在 Poem.text 字段上有 attr_accessible。
我是否遗漏了一些关于字符串的基本知识?
更新:
我似乎遗漏了一些关于字符串本质的基本知识。
当我更改以下两行时:
cleansed_text = String.new
cleansed_text = vs.text
到
cleansed_text = String.new(vs.text)
然后一切正常。
【问题讨论】:
-
我的猜测是记录由于某种原因无法保存。尝试将
vs.save更改为vs.save!,这样如果记录没有保存就会引发异常。 -
我用保存试过了!它没有引发任何异常。
-
回复:更新。一个令人惊讶的结果。我很想听听更了解为什么会发生这种情况的人。你确定没有其他改变?
String.new根本不需要。如果vs.text还不是字符串(或者您不确定),通过调用vs.text.to_s进行显式转换可能是更好的方法。 -
我很确定没有其他改变。这对我来说似乎也很神秘,但我觉得我过去曾遇到过这个确切的问题。
标签: ruby-on-rails ruby ruby-on-rails-3 rails-migrations