And*_*rew 4 migration data-migration ruby-on-rails ruby-on-rails-3
我的Rails 3应用程序具有用户模型和配置文件模型.用户has_one个人资料.
目前,配置文件具有属性first_name和last_name.虽然我不确定您为什么要更改它们,但我最初想象这些应该是可更改的,因此我将它们放在Profile模型中而不是User模型中.
但是,随着应用程序的发展,我发现实际上我需要用户的名字和姓氏不要更改,而且我真的需要它们成为User模型的一部分而不是配置文件模型.
所以,我想知道,你能编写一个迁移:
first_name和last_name列添加到用户模型.first_name和last_name值,并将其复制到用户模型中.first_name和last_name列,因为它们不再需要了.那么,这可以吗?你能展示一个例子吗?而且,最重要的是,我应该注意哪些问题?我想将此更改应用于生产应用程序,因此在进行此更改时,不要丢失数据至关重要.
谢谢!
DGM*_*DGM 13
当然,非常容易.把它放在一个迁移中:
add_column(:users, :last_name, :string)
add_column(:users, :first_name, :string)
User.reset_column_information
User.all.each do |u|
u.last_name = u.profile.try(:last_name)
u.first_name = u.profile.try(:first_name)
u.save
end
remove_column(:profiles, :first_name)
remove_column(:profiles, :last_name)
Run Code Online (Sandbox Code Playgroud)
我在那里使用try()来减少错过配置文件的可能性.它不会检查保存操作的错误,因此如果您认为需要,请将其考虑在内.此外,与往常一样,在运行之前执行数据库转储备份.:)