我有一个表必须有一个有效且存在的case_id,并且除非它存在,否则不应创建该记录。我不应该传递NULL case_id。
看起来像:
# == Schema Information
#
# Table name: medical_intervention_expert_answers
#
# id :integer not null, primary key
# case_id :integer
# problem_id :integer
# medical_intervention_id :integer
# created_at :datetime
# updated_at :datetime
# pti :boolean
#
class MedicalInterventionExpertAnswer < ActiveRecord::Base
belongs_to :case
belongs_to :problem
belongs_to :medical_intervention
def self.create_from_data(case_id, problem_id, medical_intervention_id, is_pti)
answer = self.create(case_id: case_id, problem_id: problem_id, medical_intervention_id: medical_intervention_id,
pti: is_pti)
return answer
end
end
如果我传入一个null_的case_id或者传入一个不存在的case_id,那么'answer'变量应该是nil而数据库应该是未修改的。
我必须做些什么来建立这种关系?
答案 0 :(得分:2)
对于添加外键,首先添加表的名称(不是模型名称),这是第一个参数,第二个参数是外表的名称(不是模型名称)。 作为第一个参数的表应该具有一个具有特定名称的列,如下所示:name_foreign_model_id。 例: 国外模特
class CreateGrades < ActiveRecord::Migration
def change
create_table :grades do |t|
t.string :name, limit: 20
t.integer :level, limit: 2
t.string :next, limit: 20
t.timestamps null: false
end
end
end
和
class CreateGoals < ActiveRecord::Migration
def change
create_table :goals do |t|
t.integer :dimension, limit: 2, null: false
**t.integer :grade_id, null: false**
t.string :description, limit: 1024, null: false
t.timestamps null: false
end
**add_foreign_key :goals, :grades**
end
end
您也可以在单独的迁移中添加外键。
有了这个,就不应该接受null外键。
答案 1 :(得分:1)