5

मैं रेल 4 और SQLite का उपयोग कर रहा हूं। मैं अपने indicators तालिका में फ़ोरिंग कुंजी जोड़ने की कोशिश कर रहा हूं। माइग्रेशन सब ठीक है चलानेरेल में विदेशी कुंजी 4

class AddFksToIndicator < ActiveRecord::Migration 
    def change 
     add_reference :indicators, :objective, index: true 
     add_reference :indicators, :responsible, index: true 
    end 
end 

, तो मैं कंसोल में करने की कोशिश की: कृपया मेरे कोड के नीचे

class Indicator < ActiveRecord::Base 
    belongs_to :objetive 
    belongs_to :responsible, class_name: "Person" 

end 

प्रवास स्क्रिप्ट देख

2.0.0p247 :002 > i = Indicator.new 
=> #<Indicator id: nil, name: nil, created_at: nil, updated_at: nil, objective_id: nil, responsible_id: nil> 
2.0.0p247 :002 > i.objective_id = 0 
2.0.0p247 :003 > i.save 
मेरे आश्चर्य करने के लिए

, सूचक बचाया गया था और आईडी = 0.

के साथ obective नहीं है अंत में, मैंने संकेत की जांच की रु तालिका स्कीमा और मैं:

CREATE TABLE "indicators" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "created_at" datetime, "updated_at" datetime, "objective_id" integer, "responsible_id" integer); 
CREATE INDEX "index_indicators_on_objective_id" ON "indicators" ("objective_id"); 
CREATE INDEX "index_indicators_on_responsible_id" ON "indicators" ("responsible_id"); 

क्यों objective_id और responsible_id पर कोई विदेशी कुंजी बाधा है? क्या मैं कुछ गलत कर रहा हूं?

उत्तर

8

Ruby on Rails 4.2 Release notes के अनुसार, केवल mysql, mysql2 और postgresql एडाप्टर विदेशी कुंजी का समर्थन करते हैं।

दुर्भाग्य से, sqlite3 एडाप्टर नहीं करता है।

0

जब आप add_reference का उपयोग कर रहे हैं, तो आपको उस कॉल के साथ विदेशी कुंजी समर्थन प्राप्त करने के लिए foreign_key: true जोड़ने की आवश्यकता होगी। उदाहरण के लिए:

add_reference :indicators, :objective, index: true, foreign_key: true

डिफ़ॉल्ट foreign_key: false, के रूप में डॉक्स here में उल्लेख किया है।

चूंकि आपने पहले से ही विदेशी कुंजी के बिना अपना माइग्रेशन बनाया है, इसलिए आपको add_foreign_key पर कॉल के साथ एक और माइग्रेशन बनाना होगा।

उदाहरण के लिए:

def change 
    # add_foreign_key(from_table, to_table) 
    add_foreign_key :indicators, :objectives 
end 

यहाँ documentation for add_foreign_key है।

उम्मीद है कि इससे मदद मिलती है।

संबंधित मुद्दे