web-dev-qa-db-ja.com

Rails:外部キー制約を削除します

私はユーザーと学期と次のような関係があります。そして、外部キーとして学期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はオプションのフィールドであるため、外部キー制約を持たないようにする必要があります。

7
user1670773
class RemoveSemestersFKFromUsers < ActiveRecord::Migration[5.1]
  def change
    if foreign_key_exists?(:users, :semesters)
      remove_foreign_key :users, :semesters
    end
  end
end

プレゼンス検証も削除するには、関連付けをoptional: trueとして設定することを忘れないでください。

6
max

モデルで参照をオプションにします。

class User < ApplicationRecord
  belongs_to :semester, optional: true
end

ここを参照 、4.1.2.11

0
Ben