在Ruby on Rails中,如何在遷移中添加外鍵約束?支持Rails中的外鍵約束
回答
AFAIK,沒有任何內置的支持,但有several plugins,幫助你。您也可以手動將它們添加到遷移文件中,只需使用該方法的execute方法即可。 (從Rails的API樣品):
class MakeJoinUnique < ActiveRecord::Migration
def self.up
execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
end
def self.down
execute "ALTER TABLE `pages_linked_pages` DROP INDEX `page_id_linked_page_id`"
end
end
這裏有一個基於GEM的解決方案,包括用於添加和刪除外鍵約束的支持,不會失敗使用SQLite,並與schema.rb文件正常工作:
僅供參考,因爲SQLite不支持外鍵,所以`foreigner`在使用SQLite時不會在`schema.rb`中生成外鍵。 – ashes999 2015-02-06 23:08:04
這是一個更新到matthuhiggins外國人的寶石:http://github.com/sparkfly/foreigner
特點:
- rspec的覆蓋面,對PostgreSQL的8.3.9和MySQL測試5.0.90
- 遷移支持
- schema.rb支持
未來版本將包括PostgreSQL的,這是實現多需要CHECK約束表繼承。
謝謝。外國人的寶石不適合改變方法,特別是如果表格以前沒有創建過。這很好用 – Sean 2012-02-08 02:06:01
您的歡迎。讓我知道(通過github)如果你發現任何錯誤。 – 2012-02-08 15:38:55
添加以下內容就足夠了,例如使用Products
和User
型號嗎?
add_index :products, :user_id
- 1. SQLite3不支持外鍵約束嗎?
- 2. Rails 3外鍵約束
- 3. 的Rails +的Heroku:外鍵約束失敗
- 4. 外鍵約束
- 5. 外鍵約束
- 6. 外鍵約束
- 7. Rails的:添加外鍵約束
- 8. 外鍵:與外鍵約束
- 9. Oracle中的外鍵約束
- 10. Derby中的外鍵約束
- 11. Heroku是否支持外鍵和唯一約束?
- 12. JPA:與堅持外鍵約束
- 13. Rails 4關係和Postgres外鍵約束
- 14. CakePHP&外鍵約束
- 15. SQL約束:外鍵
- 16. MySQL外鍵約束
- 17. 與外鍵約束
- 18. 與外鍵約束
- 19. 從外鍵約束
- 20. 外鍵約束 - Pentaho
- 21. SqlAlchemy外鍵約束
- 22. mysql外鍵約束
- 23. Netezza外鍵約束
- 24. 外鍵約束5
- 25. 外鍵約束SQL
- 26. SQLite外鍵約束
- 27. Sql外鍵約束
- 28. 可空的外鍵約束
- 29. InnoDB的外鍵約束
- 30. 外鍵約束的大小
舊職,但萬一有人看到這一點:唯一索引是不等同於一個外鍵約束,所以我相信這個代碼不回答OP的問題。 – dsetton 2011-06-20 20:26:00