3

私はレールにかなり慣れていないので、簡単な答えがあるかもしれません。「user_categories」テーブルを参照する「users」テーブルに「user_category」列を追加しようとしています。私は次のことを試しました:

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) 

どんな助けでもいただければ幸いです。

4

1 に答える 1

5

Active Recordの方法では、インテリジェンスはデータベースではなくモデルに属していると主張しています。そのため、そのインテリジェンスの一部をデータベースにプッシュバックするトリガーや外部キー制約などの機能は、あまり使用されていません。

validates:foreign_key、:uniqueness => trueなどの検証は、モデルがデータの整合性を強制できる1つの方法です。アソシエーションの:dependentオプションを使用すると、親が破棄されたときにモデルが子オブジェクトを自動的に破棄できます。アプリケーションレベルで動作するものと同様に、これらは参照整合性を保証できないため、データベース内の外部キー制約で拡張する人もいます。

Active Recordには、このような機能を直接操作するためのツールはありませんが、executeメソッドを使用して任意のSQLを実行できます。Active Recordに外部キーのサポートを追加するforeignerのようなプラグインを使用することもできます(db / schema.rbでの外部キーのダンプのサポートを含む)。

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

于 2012-11-13T22:23:52.450 に答える