【发布时间】:2008-11-26 10:00:48
【问题描述】:
在Ruby on Rails中,迁移时如何添加外键约束?
【问题讨论】:
标签: mysql ruby-on-rails foreign-keys
在Ruby on Rails中,迁移时如何添加外键约束?
【问题讨论】:
标签: mysql ruby-on-rails foreign-keys
这是一个基于 gem 的解决方案,包括对添加和删除外键约束的支持,在 sqlite 上不会失败,并且可以在 schema.rb 文件中正常工作:
【讨论】:
foreigner 在使用 SQLite 时不会在 schema.rb 中生成外键,因为 SQLite 不支持外键。
这是 matthuhiggins-foreigner gem 的更新:http://github.com/sparkfly/foreigner
特点:
未来版本将包含 PostgreSQL 的 CHECK 约束,这是实现多表继承所必需的。
【讨论】:
AFAIK,没有任何内置支持,但有 several plugins 可以帮助您。您也可以手动将它们添加到迁移文件中,只需使用执行方法即可,例如(来自 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
【讨论】:
添加以下内容是否足够,例如 Products 和 User 模型?
add_index :products, :user_id
【讨论】: