2015-05-20 108 views
2

我有一個表格,它必須有一個有效並且存在的case_id,並且除非它存在,否則不應創建該記錄。我不應該能夠傳遞一個NULL case_id。允許外鍵爲NULL?

它看起來像:

# == 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 

如果我傳遞一個CASE_ID是空或通過在不存在的CASE_ID,「答案」變量應該是零和數據庫應不變。

我該怎麼做纔能有這種關係?

回答

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 

您也可以在一個單獨的遷移添加外鍵。

以此,不應該接受空外鍵。

+0

問題是我使用SQLite所以我不能使用add_foreign_key – jmasterx

+0

我碰巧在發送medical_intervention_id之前進行驗證。 – cristiancvanega