Ruby on rails 删除迁移并添加另一个具有类似统计信息的迁移
我有一个叫做“sign_基板”的迁移,看起来像:Ruby on rails 删除迁移并添加另一个具有类似统计信息的迁移,ruby-on-rails,ruby,sqlite,ruby-on-rails-4,Ruby On Rails,Ruby,Sqlite,Ruby On Rails 4,我有一个叫做“sign_基板”的迁移,看起来像: 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 e
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 CreateJoinTableSignSubscriber
我想删除它,并添加类似的一个,而不是她(下面列出的一个):
class CreateJointTableCategorySubstrate
我所做的是,使用命令rails d migration createjointablesignsubstance
,我认为(或者说它做了)它什么也没做,因为当我重新启动SQLite管理器时,表仍然在那里,所以我使用并手动从文件系统中删除了我(在文件中迁移时右键单击delete)
创建此迁移之后,我所做的是,我转到模型,手动修改了一些模型(我不确定是否可以这样做),并在模型中添加了几个新关联。(如有许多等)
运行rakedb:migrate
我的问题是:
删除一次迁移并将其从数据库中删除的正确方法是什么
我向模型添加新关联的方法是好的,还是我犯了一些错误
您错过的步骤是首先回滚迁移。在删除上次迁移并添加新迁移之前,应使用rake db:rollback
撤消上次迁移。可以生成迁移以删除列或删除表,方法与生成列或表的方法相同。发件人:
产生
class RemovePartNumberFromProducts < ActiveRecord::Migration
def change
remove_column :products, :part_number, :string
end
end
对于您的关联,您可以指定模型中的关联,但关联只能通过引用外部ID或联接表等来实现。对于这些关联,您将拥有来生成合适的迁移;因此,关联是迁移+模型的团队工作。仅在模型中指定关联实际上不会将它们关联起来,除非它们的引用键存在。是的,但我不想破坏模型,我只想编辑它。@Michael如果要删除迁移,请使用rake db:rollback
如果它是最后一次迁移本身;否则,请使用我上面提到的RemoveXXXfromYYY
应用反向迁移。aaaaahahaaaaaaaaaa,所以如果我理解正确,首先删除特定的迁移(rails d migration CreateJointableSignSubstance(在我的例子中))然后创建我想要的新迁移。我还删除了与我删除的迁移相关联的模型,并创建了一个具有我想要的关联的新模型。所有这些我都是从终端完成的,而不是手动完成的。我遗漏了什么吗?部分是的。如果要删除的迁移是旧的,destroy
。你不需要删除你的模型,你只需要编辑它们以满足你的需要(和关联),然后生成合适的迁移。是的,但是编辑模型是从编辑器中进行的,还是必须再次生成?
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