2008-11-26 94 views

回答

2

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 
+6

舊職,但萬一有人看到這一點:唯一索引是不等同於一個外鍵約束,所以我相信這個代碼不回答OP的問題。 – dsetton 2011-06-20 20:26:00

14

這裏有一個基於GEM的解決方案,包括用於添加和刪除外鍵約束的支持,不會失敗使用SQLite,並與schema.rb文件正常工作:

http://github.com/matthuhiggins/foreigner

+0

僅供參考,因爲SQLite不支持外鍵,所以`foreigner`在使用SQLite時不會在`schema.rb`中生成外鍵。 – ashes999 2015-02-06 23:08:04

4

這是一個更新到matthuhiggins外國人的寶石:http://github.com/sparkfly/foreigner

特點:

  • rspec的覆蓋面,對PostgreSQL的8.3.9和MySQL測試5.0.90
  • 遷移支持
  • schema.rb支持

未來版本將包括PostgreSQL的,這是實現多需要CHECK約束表繼承。

+0

謝謝。外國人的寶石不適合改變方法,特別是如果表格以前沒有創建過。這很好用 – Sean 2012-02-08 02:06:01

+0

您的歡迎。讓我知道(通過github)如果你發現任何錯誤。 – 2012-02-08 15:38:55

0

添加以下內容就足夠了,例如使用ProductsUser型號嗎?

add_index :products, :user_id