1
我試圖更改表的id
場是一個uuid
Rails遷移 - 暫時忽略外鍵約束?
這裏是我的代碼:嘗試t.remove :id
的時候,因爲一個外鍵約束的
class AddUuidToProjects < ActiveRecord::Migration[5.0]
def up
add_column :projects, :uuid, :string, limit:36, null: false, first: true
add_column :projects, :old_id, :integer
Project.all.each do |p|
p.update!(old_id: p.id)
end
change_table :projects do |t|
t.remove :id
t.rename :uuid, :id
end
execute "ALTER TABLE projects ADD PRIMARY KEY (id);"
Project.all.each do |p|
# has_one image
Image.find(p.old_id).update!(project: p)
# has_many stories
Story.where(project_id: p.old_id).each do |s|
s.update!(project: p)
end
end
end
...
end
這種遷移休息。該錯誤信息是:
Mysql2::Error: Cannot drop column 'id': needed in a foreign key constraint 'fk_rails_be41fd4bb7' of table 'db_dev.stories': ALTER TABLE `projects` DROP `id`
的事情是,如果整個遷移跑那麼我會被交換出去的id
柱用另一個,太固定了外鍵。那麼,有沒有辦法忽略遷移的限制?
嘗試第一次投放的約束,則稍後重新加入http://stackoverflow.com/questions/14122031/how-to-remove-constraints-from-my-mysql-table – jvnill
你也可以將uuid設置爲主鍵,並讓主動記錄知道。 /api.rubyonrails.org/classes/ActiveRecord/AttributeMethods/PrimaryKey/ClassMethods.html#method-i-primary_key – jvnill