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