[英]Convert camelcase table and column names to snake case in mysql
我试图谷歌搜索和堆栈溢出,但找不到答案,所以我想我会发布一个。
目前,我继承了一个遗留系统(PHP / MySQL),其中表名和列名都用驼峰式定义(即tableName,columnName)。 我想将此系统迁移到RoR,并希望将MySQL表也转换为蛇形格式(即table_name,column_name)。
如何有效地执行此操作,并且仍然成功迁移数据? 有人做过这个beofre吗?
您可以使用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迁移中重命名数据库列?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.