我尝试了谷歌搜索和stackoverflowing,但找不到答案,所以我想我会发布一个。
目前我继承了一个遗留系统(PHP/MySQL),其中表名和列名以驼峰形式定义(即tableName、columnName)。我想将此系统迁移到 RoR,并希望将 MySQL 表也转换为蛇案例(即 table_name、column_name)。
我怎样才能有效地做到这一点并且仍然成功地迁移数据?有没有人这样做过?
我尝试了谷歌搜索和stackoverflowing,但找不到答案,所以我想我会发布一个。
目前我继承了一个遗留系统(PHP/MySQL),其中表名和列名以驼峰形式定义(即tableName、columnName)。我想将此系统迁移到 RoR,并希望将 MySQL 表也转换为蛇案例(即 table_name、column_name)。
我怎样才能有效地做到这一点并且仍然成功地迁移数据?有没有人这样做过?
您可以使用 Rails 数据库迁移重命名表和列。
您可以创建一个迁移文件来重命名表,并创建另一个迁移文件来重命名其列。
假设我们要重命名emailSubscriptions
表。
> bundle exec rails generate migrations rename_email_subscriptions
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions.rb
编辑迁移文件
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions.rb
class RenameEmailSubscriptions < ActiveRecord::Migration
def change
rename_table :emailSubscriptions, :email_subscriptions
end
end
对于列
> bundle exec rails generate migrations rename_email_subscriptions_columns
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions_columns.rb
编辑迁移文件
# this creates db/migrate/xxxxxxxx_rename_email_subscriptions_columns.rb
class RenameEmailSubscriptionsColumns < ActiveRecord::Migration
def change
change_table :email_subscriptions do |t|
t.rename :columnName1, :column_name_1
t.rename :columnName2, :column_name_2
t.rename :columnName3, :column_name_3
t.rename :columnName4, :column_name_4
end
end
end
跑bundle exec rake db:migrate
对所有表及其对应的列执行此操作。
请注意,我决定拆分迁移以重命名表及其列,以便可以回滚迁移。
您可以覆盖模型中的表名:
class Project < ActiveRecord::Base
self.table_name = "project"
end
或者
class Post < ActiveRecord::Base
def self.table_name
"special_" + super
end
end
Post.table_name # => "special_posts"
更多信息: http: //guides.rubyonrails.org/3_2_release_notes.html
您还可以制作一个脚本并重命名您的表格并在之后使用 rails 约定,这取决于您!
从那里您可以使用 rails 迁移重命名列名: 如何在 Ruby on Rails 迁移中重命名数据库列?