迁移以创建数据库中已经存在的表

时间:2019-03-15 05:31:25

标签: ruby migration

我已经通过psql控制台创建了psql表。我已经在对应表的rails中创建了一个模型。现在,如果我想编写一个迁移来创建表,以便使用我的代码的某人无需通过psq控制台创建表,并且在运行迁移时也不应为我删除表。如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

在您的迁移文件中:

create_table :foo do
  .....
end unless table_exists? :foo

ActiveRecord::ConnectionAdapters::SchemaStatements#table_exists?

答案 1 :(得分:2)

如果您正在阅读此答案,并且您在Rails 6上,则会在Rails 6 beta1#create_table中添加一个新标志来解决这个确切的问题。

示例:

create_table :posts, if_not_exists: true do |t|
  t.string :title
end

答案 2 :(得分:0)

Rails鼓励开发人员仅通过迁移文件来修改其数据库。因为当您进行手动更改时,schema.rb不会更新。这会使其他开发人员的架构与您的架构不一致。

如果您在本地数据库中手动创建了一个表,则可以手动删除该表并创建一个新的迁移文件。然后,如果您运行迁移文件,它将创建表并相应地更新schema.rb

如果您仍然只想为其他开发人员编写迁移,则可以使用create表创建迁移,然后在运行迁移时对其进行注释。 schema.rb现在将使用新表进行更新,因为每次您运行DB命令时,Rails都会自动尝试将数据库与schema.rb文件进行同步。现在,取消注释迁移更改,并将更改推送给其他开发人员以获取表格。