删除迁移并添加另一个具有类似统计信息的迁移

时间:2014-04-09 19:08:03

标签: ruby-on-rails ruby sqlite ruby-on-rails-4

我有一个名为“sign_substrate”的迁移,它看起来像:

class CreateJoinTableSignSubstrate < ActiveRecord::Migration
  def change
    create_join_table :signs, :substrates do |t|
      # t.index [:sign_id, :substrate_id]
      # t.index [:substrate_id, :sign_id]
    end
  end
end

我想将其删除,并添加类似的代替她(下面列出的那个):

class CreateJoinTableCategorySubstrate < ActiveRecord::Migration
  def change
    create_join_table :categories, :substrates do |t|
      # t.index [:category_id, :substrate_id]
      # t.index [:substrate_id, :category_id]
    end
  end
end

我所做的是,使用了命令rails d migration CreateJoinTableSignSubstrate,它没有做任何我想的(或者它没有做到),因为当我重新启动我的SQLite管理器时,表仍然存在,所以我使用并从文件系统中手动删除了(右键单击文件中的迁移删除。)

创建此迁移后,我做了什么,我去了模型,并手动修改了一些模型(我不确定可以这样做)并在模型中添加了几个新的关联。 (比如has_many等等)

在所有事情之后离开rake db:migrate

我的问题是:

  1. 删除一次迁移的正确方法是什么,并将其从数据库中删除。

  2. 我的模式添加新关联是一种好的方式,还是我犯了一些错误。

2 个答案:

答案 0 :(得分:1)

您可以生成迁移以删除列或删除表,方法与生成它们相同。来自docs

rails generate migration RemovePartNumberFromProducts part_number:string

产生

class RemovePartNumberFromProducts < ActiveRecord::Migration
  def change
    remove_column :products, :part_number, :string
  end
end

销毁模型:

rails destroy model ModelName

对于您的关联怀疑,您指定模型中的关联,但只有引用外来ID 连接表才能实现关联对于他们来说,无论如何,你拥有来生成合适的迁移;所以协会是迁移+模型的团队工作。只是指定模型中的关联实际上不会关联它们,除非它们的引用键存在。

答案 1 :(得分:0)

您错过的步骤是首先回滚迁移。您应该使用rake db:rollback撤消上次迁移,然后再将其删除并添加新迁移。