Ruby on Rails - 如何在脚手架中创建外键

时间:2012-11-13 22:18:33

标签: ruby-on-rails database activerecord

我对rails非常陌生,所以可能有一个简单的答案。我正在尝试将“user_category”列添加到我的“users”表中,该表引用“user_categories”表。我尝试了以下方法:

rails generate migration add_user_category_to_users user_category:integer

然后......

rails generate scaffold User_Category title:string description:text

但是在rake db:migrate上我收到以下错误:

==  CreateUserCategories: migrating ===========================================
-- create_table(:user_categories)
rake aborted!
An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: table "user_categories" already exists: CREATE TABLE "user_categories" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar(255), "description" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

Active Record方式声称智能属于您的模型,而不属于数据库。因此,诸如触发器或外键约束之类的功能(将一些智能推回到数据库中)并没有被大量使用。

验证,例如validates:foreign_key,:uniqueness => true是模型可以强制执行数据完整性的一种方式。关联上的:dependent选项允许模型在销毁父对象时自动销毁子对象。就像在应用程序级别运行的任何东西一样,这些不能保证参照完整性,因此有些人会在数据库中使用外键约束来增强它们。

虽然Active Record没有提供任何直接使用这些功能的工具,但execute方法可用于执行任意SQL。你也可以使用像foreigner这样的插件,为Active Record添加外键支持(包括支持在db / schema.rb中转储外键)。

http://guides.rubyonrails.org/migrations.html