0

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

4

3 回答 3

2

如果您正在阅读此答案,并且您使用的是 Rails 6,那么#create_tableRails 6 beta1中添加了一个新标志来解决这个确切的问题。

例子:

create_table :posts, if_not_exists: true do |t|
  t.string :title
end
于 2019-03-15T06:50:01.450 回答
2

在您的迁移文件中:

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

ActiveRecord::ConnectionAdapters::SchemaStatements#table_exists?.

于 2019-03-15T05:44:38.337 回答
0

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

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

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

于 2019-03-15T05:40:30.860 回答