ActiveRecord: कंसोल से तालिका में सूची स्तंभ


112

मुझे पता है कि आप ActiveRecord का उपयोग करके कंसोल में तालिकाओं को सूचीबद्ध करने के लिए कह सकते हैं:

ActiveRecord::Base.connection.tables

क्या कोई कमांड है जो किसी दिए गए तालिका में कॉलमों को सूचीबद्ध करेगा?

जवाबों:


213

यह एक तालिका से column_names को सूचीबद्ध करेगा

Model.column_names
e.g. User.column_names

16
आप Model.columnsडेटाबेस कॉन्फ़िगरेशन डेटा सहित स्तंभों के बारे में अधिक जानकारी प्राप्त करने के लिए कुछ चला सकते हैं ।
srt32

1
महान! का उपयोग कर Model.columnsActiveRecord के माध्यम से एक तालिका के लिए सभी जानकारी प्रदान करता है। मेरे लिए महत्वपूर्ण रूप से यह विश्वास पाने का एकमात्र और सबसे आसान तरीका था कि डेटाबेस स्तर पर मेरी प्राथमिक कुंजी वास्तव में क्या थी।
nibbex

2
आप हमेशा Model.primary_key का उपयोग कर सकते हैं, जो आपको रेल के अनुसार प्राथमिक कुंजी का नाम देता है। (यह 'आईडी' होगा जब तक कि इसे मॉडल में कुछ और के रूप में घोषित नहीं किया जाता)।
AJFaraday

57

यह कॉलम प्राप्त करता है, न कि केवल कॉलम नाम और ActiveRecord :: Base :: Connection का उपयोग करता है, इसलिए कोई मॉडल आवश्यक नहीं है। डीबी की संरचना को जल्दी से तैयार करने के लिए आसान।

ActiveRecord::Base.connection.tables.each do |table_name|
  puts table_name
  ActiveRecord::Base.connection.columns(table_name).each do |c| 
    puts "- #{c.name}: #{c.type} #{c.limit}"
  end
end

नमूना आउटपुट: http://screencast.com/t/EsNlvJEqM


3.2 रेल में, यह इस तरह से किसी भी तरह से primaryविशेषता को सही ढंग से सेट नहीं करता है (सभी कॉलम हैं primary=nil)। यह Model.columnssrt32 द्वारा सुझाई गई विधि के साथ सही ढंग से सेट है ।
Sayap

1
यह सही जवाब है। मॉडल होने की कोई आवश्यकता नहीं है। हर टेबल में एक मॉडल नहीं है। "has_many_and_belongs_to"
baash05

22

तीन रेल का उपयोग करके आप मॉडल का नाम लिख सकते हैं:

> User
gives:
User(id: integer, name: string, email: string, etc...)

रेल चार में, आपको पहले एक कनेक्शन स्थापित करने की आवश्यकता है:

irb(main):001:0> User
=> User (call 'User.connection' to establish a connection)
irb(main):002:0> User.connection; nil #call nil to stop repl spitting out the connection object (long)
=> nil
irb(main):003:0> User
User(id: integer, name: string, email: string, etc...)

ओपी सिर्फ कॉलम नाम चाहता है।
रयान बिग

शायद। लेकिन जरूरी नहीं। यह अतिरिक्त जानकारी के साथ उन्हें प्राप्त करने का एक वैकल्पिक तरीका है जो कभी-कभी कंसोल से कॉलम सूचीबद्ध करते समय सहायक होता है
यूल

1
यह भी जानने की एक उपयोगी विधि है, IMO। @ यूल - यह स्कीमा / माइग्रेशन कोड आदि को क्वेरी करता है या डीबी को क्वेरी करता है? मेरे पूछने का कारण यह है कि मैं अपने स्कीमा के बीच एक बेमेल अनुभव कर रहा था और वास्तव में डीबी (एक माइग्रेशन गड़बड़) में क्या था, इसलिए विशेष रूप से मुझे यह सुनिश्चित करने की आवश्यकता थी कि मैं देख रहा था कि वास्तव में तालिका में क्या था।
एंड्रयू

@ और यह डीबी पर सवाल उठाता है (इसलिए रेल में कनेक्शन स्थापित करने की आवश्यकता है 4)
यूल

5

यदि आप SQL कमांड के साथ सहज हैं, तो आप अपने ऐप के फ़ोल्डर में प्रवेश कर सकते हैं और चला सकते हैं rails db, जिसका संक्षिप्त रूप है rails dbconsole। यह आपके डेटाबेस के शेल में प्रवेश करेगा, चाहे वह साइक्लाइट हो या mysql।

फिर, आप sql कमांड का उपयोग करके टेबल कॉलम को क्वेरी कर सकते हैं जैसे:

pragma table_info(your_table);

1
MySQL उपयोग के लिए describe your_table;, सही नहीं है, लेकिन काम करता है
Valk

2

आप rails dbconsolesqlite कंसोल को खोलने के लिए कमांड लाइन टूल में चला सकते हैं । फिर .tablesसभी तालिकाओं को सूचीबद्ध करने के लिए और .fullschemaकॉलम नामों और प्रकारों के साथ सभी तालिकाओं की एक सूची प्राप्त करने के लिए टाइप करें।


यदि आप सक्रिय व्यवस्थापक का उपयोग करते हैं, तो आप इस उत्तर में ऑनलाइन डेटाबेस कंसोल (मणि एक्टीडमिन-स्क्वॉलपेज ) का उपयोग कर सकते हैं।
ओक्लास

1
  • एक तालिका में कॉलम को सूचीबद्ध करने के लिए मैं आमतौर पर इसके साथ जाता हूं
    Model.column_names.sort:।
    i.e. Orders.column_names.sort

    कॉलम नामों को छाँटने से यह पता लगाना आसान हो जाता है कि आप क्या खोज रहे हैं।

  • प्रत्येक स्तंभ पर अधिक जानकारी के लिए इसका उपयोग करें
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h:।

यह एक अच्छा हैश प्रदान करेगा। उदाहरण के लिए:

{
   id => int(4),
   created_at => datetime
}

1

इस उपयोगी जानकारी के पूरक, उदाहरण के लिए रेल कंसोल ओ रेल्स डबकोन्स का उपयोग करना:

छात्र रेल मॉडल है, रेल कंसोल का उपयोग कर:

$ rails console
> Student.column_names
 => ["id", "name", "surname", "created_at", "updated_at"] 

> Student
 => Student(id: integer, name: string, surname: string, created_at: datetime, updated_at: datetime)

अन्य विकल्प का उपयोग SQLite रेल के माध्यम से:

$ rails dbconsole

sqlite> .help

sqlite> .table
ar_internal_metadata  relatives             schools             
relationships         schema_migrations     students 

sqlite> .schema students
CREATE TABLE "students" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "surname" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

अंत में अधिक जानकारी के लिए।

sqlite> .help

उम्मीद है की यह मदद करेगा!


-1

अधिक कॉम्पैक्ट प्रारूप के लिए, और कम टाइपिंग बस:

Portfolio.column_types 

रेल में 5 +
पाक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.