14

ActiveRecordで外部キーを作成するにはどうすればよいですか?私のモデルには次のようなものがあります。

class Student < ActiveRecord::Base
  attr_accessible :name, :level_id
  belongs_to :level
end

class Level < ActiveRecord::Base
  attr_accessible :number
  has_many :students
end

ただし、schema.rbおよび開発sqlite3データベースには、level_idフィールドで外部キー制約が設定されていることを示すものはありません。これは、ActiveRecordやRailsとは別に、手動で行う必要があることですか?ステップを逃しましたか?

Rails3.2.8の使用

4

5 に答える 5

15

ActiveRecord が関係を正しくマップするために、外部キー制約は必要ありません。検証を使用して、Rails アプリでデータの整合性を確保できます。

Rails の移行では、外部キーを作成するためのヘルパーは提供されません。移行の制約に対して独自の SQL を作成するか、Foreigner Gemを使用できます。Foreigner は、移行で制約を作成するためのヘルパー メソッドを提供します。

add_foreign_key(:students, :levels)
于 2012-09-14T16:41:43.840 に答える
13

rails >= 4.2 で、、、mysqlまたはmysql2アダプターpostgresqlを使用している場合は、次add_foreign_keyのように移行でメソッドを使用できます。

# add a foreign key to `articles.author_id` referencing `authors.id`
add_foreign_key :articles, :authors

API リファレンス

于 2015-01-02T21:51:13.447 に答える
3

これは Rails に組み込まれているため、Foreigner は必要ありません。セクション 3.6 外部キーを参照してください: http://edgeguides.rubyonrails.org/active_record_migrations.html

于 2015-03-10T18:55:07.023 に答える
2

belong_toモデルにと行を追加するとhas_many、Rails はそれらの関係を認識し、ヘルパー メソッドを生成しますが、データベース レベルで FK を作成しません。そのためには、移行を作成して実行する必要があります。

rails g migration add_level_id_to_students level_id:integer

次にレーキ db:migrate

モデルの外部キー部分を使用してモデルを生成する場合は、次のreferencesショートカット を使用できます。rails g model Student name:string level:references

詳細については、Rails ガイドをご覧ください。

于 2012-09-14T16:43:14.230 に答える