Rails:删除外键约束

问题描述 投票:4回答:2

我跟用户和学期有关联。我创建了用semester 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,但是semester_id不应该有外键约束,因为它是一个可选字段。

ruby-on-rails rails-migrations
2个回答
4
投票
class RemoveSemestersFKFromUsers < ActiveRecord::Migration[5.1]
  def change
    if foreign_key_exists?(:users, :semesters)
      remove_foreign_key :users, :semesters
    end
  end
end

请记住将关联设置为optional: true以删除状态验证。


0
投票

在模型中使引用可选:

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

See here,4.1.2.11

© www.soinside.com 2019 - 2024. All rights reserved.