Rails 4.2 add_foreign_key サポートの参照:
# add a foreign key to `articles.author_id` referencing `authors.id`
add_foreign_key :articles, :authors
状況を許容するために、null許容の外部キー制約を作成する方法、articles.author_id
はnullになることもありますか?
ガイドには、add_foreign_key
が対応する外部フィールドを「NOT NULL」または必須にすることを意味するものはありません。 add_foreign_key
は、フィールドが必須であるかどうかにかかわらず、外部キー制約を追加します(あなたの場合、articles
のauthor_id
)。
移行でこれを試したときにエラーが発生しましたか?
生成されるSQLは次のとおりです。
ALTER TABLE "articles" ADD CONSTRAINT articles_author_id_fk FOREIGN KEY ("author_id") REFERENCES "authors" ("id")
したがって、元のarticles
の移行でauthor_id
がnullの場合、nullを許可する外部キーを持つことができます。
in Rails 5それが1:n(belongs_to
)、デフォルトが変更されたため:
belongs_to :author, optional: true
これは、対応する Changeset です。
アプリケーション全体で古い動作を使用するために、以下を設定することもできます。
Rails.application.config.active_record.belongs_to_required_by_default = false
config/initializers/new_framework_defaults.rb
通常表示されるエラーは次のとおりです。
ActiveRecord::RecordInvalid: Validation failed: Author must exist
from /usr/local/lib/Ruby/gems/2.3.0/gems/activerecord-5.0.0.1/lib/active_record/validations.rb:78:in `raise_validation_error'
article
モデルにoptional: true
とともにbelongs_to :author
を追加すると、仕事ができます。