我已经通过psql控制台创建了psql表。我已经在对应表的rails中创建了一个模型。现在,如果我想编写一个迁移来创建表,以便使用我的代码的某人无需通过psq控制台创建表,并且在运行迁移时也不应为我删除表。如何解决这个问题。
答案 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
文件进行同步。现在,取消注释迁移更改,并将更改推送给其他开发人员以获取表格。