私はユーザーと学期と次のような関係があります。そして、外部キーとして学期IDを使用してユーザーテーブルを作成しました。したがって、学期IDが存在しない場合、ユーザーは作成されません。ただし、登録フォームでは学期IDはオプションです。
class User < ApplicationRecord
belongs_to :semester
end
class Semester < ApplicationRecord
has_many :users
end
class CreateUsers < ActiveRecord::Migration[5.1]
def change
create_table :users do |t|
t.string :email
t.references :semester, foreign_key: true
t.timestamps
end
end
end
では、外部キー制約を削除するために別の移行を作成するにはどうすればよいですか?したがって、ユーザーテーブルにはemailとsemester_idの2つの列があるはずですが、semester_idはオプションのフィールドであるため、外部キー制約を持たないようにする必要があります。
class RemoveSemestersFKFromUsers < ActiveRecord::Migration[5.1]
def change
if foreign_key_exists?(:users, :semesters)
remove_foreign_key :users, :semesters
end
end
end
プレゼンス検証も削除するには、関連付けをoptional: true
として設定することを忘れないでください。
モデルで参照をオプションにします。
class User < ApplicationRecord
belongs_to :semester, optional: true
end
ここを参照 、4.1.2.11