我有一个名为“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
。
我的问题是:
删除一次迁移的正确方法是什么,并将其从数据库中删除。
我的模式添加新关联是一种好的方式,还是我犯了一些错误。
答案 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
撤消上次迁移,然后再将其删除并添加新迁移。