2008-11-26 80 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