অ্যাক্টিভেকর্ড: কনসোল থেকে সারণীতে কলাম তালিকাভুক্ত করুন


112

আমি জানি যে আপনি অ্যাক্টিভেকর্ডকে কনসোলটিতে টেবিলগুলি তালিকাবদ্ধ করতে অনুরোধ করতে পারেন:

ActiveRecord::Base.connection.tables

এমন কোনও কমান্ড রয়েছে যা প্রদত্ত টেবিলে কলামগুলি তালিকাভুক্ত করবে?

উত্তর:


213

এটি একটি সারণী থেকে কলাম_নাম তালিকাবদ্ধ করবে

Model.column_names
e.g. User.column_names

16
আপনি Model.columnsডাটাবেস কনফিগার ডেটা সহ কলামগুলি সম্পর্কে আরও তথ্য পাওয়ার মতো কিছু চালাতে পারেন ।
srt32

1
গ্রেট! Model.columnsঅ্যাক্টিভেকর্ডের মাধ্যমে টেবিলের জন্য সমস্ত তথ্য ব্যবহার করে। গুরুতরভাবে আমার কাছে এটি ছিল যে আমার প্রাথমিক কীটি সত্যিকারের ডাটাবেস স্তরে ছিল তার আস্থা অর্জনের একমাত্র এবং সহজ উপায় ।
নিববেেক্স

2
আপনি সর্বদা Model.primary_key ব্যবহার করতে পারেন, যা আপনাকে রেল অনুসারে প্রাথমিক কী এর নাম দেয়। (এটি 'আইডি' হবে যদি না এটি অন্য কিছু হিসাবে মডেলটিতে ঘোষণা করা হয়)।
এজেফারাডে

57

এটি কলামগুলি পাবে, কেবল কলামের নাম নয় এবং অ্যাক্টিভেকর্ড :: বেস :: সংযোগ ব্যবহার করে, সুতরাং কোনও মডেলের প্রয়োজন হয় না। দ্রুত একটি ডিবি কাঠামো আউটপুট আউট জন্য সহজ।

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 দ্বারা প্রস্তাবিত পদ্ধতির সাথে সঠিকভাবে সেট করা আছে ।
সায়েপ

1
এটি সঠিক উত্তর। কোনও মডেল থাকার দরকার নেই। প্রতিটি টেবিলের একটি মডেল থাকে না। "has_many_and_belongs_to"
বাশ 05

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
আইএমও জানতে এটিও একটি দরকারী পদ্ধতি। @ ইউল - এইটি কি স্কিমা / মাইগ্রেশন কোড ইত্যাদির সন্ধান করে না এটি ডিবিকে জিজ্ঞাসা করে? আমার জিজ্ঞাসার কারণটি হ'ল আমি আমার স্কিমা এবং আসলে ডিবিতে যা ছিল তার মধ্যে একটি মিল নেই (এক মাইগ্রেশন গ্লিটচেড), সুতরাং বিশেষত আমার নিশ্চিত হওয়া দরকার যে আমি টেবিলে আসলে কী ছিল তা দেখছিলাম।
অ্যান্ড্রু

@ এন্ড্রু এটি ডিবিকে জিজ্ঞাসা করেছে (অতএব রেল 4 এ সংযোগ স্থাপনের প্রয়োজনীয়তা)
ইউলে

5

আপনি যদি এসকিউএল কমান্ডগুলির সাথে স্বাচ্ছন্দ্য বোধ করেন তবে আপনি আপনার অ্যাপ্লিকেশনটির ফোল্ডারটি প্রবেশ করতে পারেন এবং চালাতে পারেন rails db, এটি একটি সংক্ষিপ্ত রূপ rails dbconsole। এটি আপনার ডাটাবেসের শেলটি প্রবেশ করবে, এটি স্ক্লাইট বা মাইএসকিএল হোক।

তারপরে, আপনি সারণী কলামগুলি যেমন sql কমান্ড ব্যবহার করে জিজ্ঞাসা করতে পারেন:

pragma table_info(your_table);

1
মাইএসকিউএল ব্যবহারের জন্য describe your_table;, নিখুঁত নয় তবে কাজ করে
ভাল

2

rails dbconsoleস্ক্লাইট কনসোল খোলার জন্য আপনি কমান্ড লাইন সরঞ্জামটি চালাতে পারেন । তারপর টাইপ .tablesতালিকায় সব টেবিল এবং .fullschemaকলাম নাম এবং প্রকারগুলি সঙ্গে সব টেবিল একটি তালিকা পাবেন।


আপনি যদি সক্রিয় প্রশাসক ব্যবহার করেন তবে এই উত্তরটিতে বর্ণনাকারী হিসাবে আপনি অনলাইন ডাটাবেস কনসোল (রত্ন অ্যাক্টিভ্যাডমিন-স্ক্ল্যাপেজ ) ব্যবহার করতে পারেন।
Oklas

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

এই দরকারী তথ্য পরিপূরক, উদাহরণস্বরূপ রেল কনসোল ও রেলস dbconsole ব্যবহার করে:

শিক্ষার্থী আমার মডেল, রেল কনসোল ব্যবহার করে:

$ 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)

রেলের মাধ্যমে এসকিউএলাইট ব্যবহার করে অন্য বিকল্প:

$ 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+ রেলের অস্তিত্ব নেই
পাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.