Ruby on Rails - 如何在 Scaffold 中创建外键

jak*_*ake 3 database activerecord ruby-on-rails

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

rails generate migration add_user_category_to_users user_category:integer
Run Code Online (Sandbox Code Playgroud)

进而...

rails generate scaffold User_Category title:string description:text
Run Code Online (Sandbox Code Playgroud)

但是在 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) 
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

Dan*_*.K. 5

Active Record 方式声称智能属于你的模型,而不是数据库。因此,不会大量使用触发器或外键约束等将某些智能推回数据库的功能。

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

尽管 Active Record 没有提供任何直接使用这些特性的工具,但是 execute 方法可以用来执行任意 SQL。你也可以使用一些像外国人这样的插件来为 Active Record 添加外键支持(包括支持在 db/schema.rb 中转储外键)。

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