मैं रेल के लिए बहुत नया हूं, और वर्तमान में हमारी कक्षा के लिए, हमें डेटाबेस के साथ एक एप्लिकेशन बनाना है।

मेरे पास तालिकाओं का एक गुच्छा है जिसमें अन्य तालिकाओं के लिए विदेशी कुंजी हैं, और मैंने इन संघों को माइग्रेशन फ़ाइलों (execute("ALTER TABLE...") का उपयोग करके) में परिभाषित किया है, लेकिन मेरे मॉडल में नहीं (मेरे पास केवल self.primary_key परिभाषित है मेरे मॉडल)।

मेरा प्रश्न है, चूंकि मैंने इन संघों को अपने प्रवासन में निर्धारित किया है, क्या मुझे अपने मॉडलों में संघों को भी स्थापित करना होगा (यानी has_may, belongs_to, validates_uniqueness_of, आदि)?

मैं एक ऐप बनाउंगा जो उपयोगकर्ता इनपुट की अनुमति देगा, और ये इनपुट डेटाबेस में डाला जाएगा।

उम्मीद है कि मेरा भ्रम दूर हो जाएगा। आपको धन्यवाद!

उदाहरण

माइग्रेशन फ़ाइल:

class CreateSchools < ActiveRecord::Migration[5.0]
  def up
    create_table :schools, {:id => false} do |t|
      t.integer :school_id
      t.string :school_name
      t.string :contact_number
      t.integer :a_id

      t.timestamps
    end
    execute "ALTER TABLE schools ADD PRIMARY KEY(school_id);"
    execute "ALTER TABLE schools ADD CONSTRAINT a_id UNIQUE(a_id);"
    execute "ALTER TABLE schools ADD CONSTRAINT school_references_location FOREIGN KEY (a_id) REFERENCES locations(a_id) ON DELETE CASCADE ON UPDATE CASCADE;"
    change_column_null :schools, :school_name, false
    change_column_null :schools, :a_id, false
  end

  def down
    execute "ALTER TABLE schools DROP PRIMARY KEY;"
    execute "ALTER TABLE schools DROP FOREIGN KEY school_references_location;"
    execute "ALTER TABLE schools DROP INDEX a_id;"
    drop_table :schools
  end
end

आदर्श:

class School < ApplicationRecord
  self.primary_key = :school_id
end
0
limciana 13 नवम्बर 2017, 15:49

1 उत्तर

सबसे बढ़िया उत्तर

हां आपको मॉडल में भी संघों को परिभाषित करने की आवश्यकता होगी।

सभी रेल अनुप्रयोगों के लिए,

  • संघों के अनुसार माइग्रेट करना और डीबी बदलना पहला कदम है।

  • फिर मॉडल में एसोसिएशन स्टेटमेंट जोड़ें ताकि डीबी से एसोसिएशन को सरल तरीकों का उपयोग करके एक्सेस किया जा सके। जैसे user.posts आदि।

  • मॉडल में एसोसिएशन स्टेटमेंट जोड़ना आपको ऐसे तरीके प्रदान करता है जो डीबी से डेटा को आसानी से पुनर्प्राप्त करने के लिए बुलाए गए तरीके के अनुसार क्वेरी उत्पन्न करता है। यदि आप मॉडल में एसोसिएशन स्टेटमेंट शामिल नहीं करना चाहते हैं, तो आप ज्वाइन और सेलेक्ट स्टेटमेंट का उपयोग करके डीबी से भी पूछ सकते हैं।

इसलिए, संक्षेप में, संघों को प्रबंधित करने के लिए स्कीमा डिजाइन करना आवश्यक है, जबकि मॉडल में उनका उल्लेख नहीं है। लेकिन हम इसे अपने जीवन और कोड को सरल बनाने के लिए करते हैं।

2
Aakash Gupta 13 नवम्बर 2017, 16:10