Ruby on Rails এর Active Record একটি শক্তিশালী ORM (Object-Relational Mapping) টুল যা ডেটাবেসের সাথে কাজ করার জন্য একাধিক কুয়েরি মেথড প্রদান করে। এই কুয়েরি মেথডগুলো ব্যবহার করে আপনি ডেটাবেস থেকে ডেটা অনুসন্ধান, সাজানো, সীমিত করা এবং আরও অনেক ধরনের অপারেশন করতে পারেন। এই পদ্ধতিগুলোর মাধ্যমে ডেটাবেস থেকে তথ্য সহজে এবং কার্যকরীভাবে বের করা যায়।
Active Record Query Methods এর প্রধান মেথডগুলো
1. where
where মেথড ডেটাবেসে শর্তভিত্তিক রেকর্ড অনুসন্ধান করতে ব্যবহৃত হয়। এটি SQL এর WHERE ক্লজের মতো কাজ করে এবং রেকর্ডগুলো একটি অ্যারে বা অ্যাক্টিভ রেকর্ড সম্পর্কিত অবজেক্টের আকারে ফেরত দেয়।
উদাহরণ:
# যেখানে name 'John Doe' হবে
users = User.where(name: 'John Doe')
# যেখানে age 30 এর বেশি হবে
users = User.where('age > ?', 30)
- প্রথম উদাহরণে
where(name: 'John Doe')ব্যবহার করে আমরাnameফিল্ডেJohn Doeথাকা সব রেকর্ড নির্বাচন করেছি। - দ্বিতীয় উদাহরণে SQL ইনজেকশন থেকে রক্ষা পেতে
?ব্যবহার করা হয়েছে।
2. find
find মেথড ব্যবহার করে একটি নির্দিষ্ট আইডি দ্বারা একক রেকর্ড পাওয়া যায়। এটি যদি রেকর্ড না পায়, তবে ActiveRecord::RecordNotFound এরর দেয়।
উদাহরণ:
user = User.find(1) # id 1 এর ব্যবহারকারীকে খুঁজে পাওয়া
এখানে, find(1) আইডি 1 এর ব্যবহারকারী রেকর্ডটি ফিরিয়ে দিবে।
3. find_by
find_by মেথড ব্যবহার করে শর্ত অনুযায়ী একটি রেকর্ড খুঁজে পাওয়া যায়। এটি একটি রেকর্ড ফিরিয়ে দেয় অথবা কিছু না পেলে nil ফেরত দেয়। এটি find এর মতো আইডি অনুসন্ধান নয়, বরং যে কোনো কলাম অনুসন্ধান করতে পারে।
উদাহরণ:
user = User.find_by(name: 'John Doe') # name 'John Doe' হওয়া প্রথম ব্যবহারকারীকে খুঁজে পাওয়া
এখানে, find_by(name: 'John Doe') প্রথম রেকর্ড যেটি name ফিল্ডে John Doe থাকে, তা ফেরত দিবে।
4. order
order মেথড ডেটা সাজানোর জন্য ব্যবহৃত হয়। এটি SQL এর ORDER BY ক্লজের মতো কাজ করে, এবং ডেটা একটি নির্দিষ্ট কলাম অনুযায়ী সাজিয়ে দেয়।
উদাহরণ:
# নাম অনুযায়ী সাজানো
users = User.order(:name)
# বয়স অনুযায়ী সাজানো, বড় থেকে ছোট
users = User.order(age: :desc)
# দুইটি কলাম অনুযায়ী সাজানো
users = User.order(:name, :age)
এখানে, order(:name) নাম অনুযায়ী অ্যাসেন্ডিং অর্ডারে সাজাবে, এবং order(age: :desc) বয়সের ক্ষেত্রে ডিসেন্ডিং অর্ডারে সাজাবে।
5. limit
limit মেথড ডেটাবেস থেকে একটি নির্দিষ্ট সংখ্যক রেকর্ড পেতে ব্যবহৃত হয়। এটি SQL এর LIMIT ক্লজের মতো কাজ করে।
উদাহরণ:
# প্রথম 5টি ব্যবহারকারী
users = User.limit(5)
এখানে, limit(5) প্রথম ৫টি রেকর্ড ফেরত দিবে।
6. offset
offset মেথড ব্যবহার করে আপনি ডেটা পেজিনেশন (pagination) করতে পারেন। এটি ডেটাবেস থেকে নির্দিষ্ট সংখ্যক রেকর্ড বাদ দিয়ে পরবর্তী রেকর্ডগুলি ফিরিয়ে দেয়।
উদাহরণ:
# প্রথম 10 রেকর্ড বাদ দিয়ে পরবর্তী 5 রেকর্ড
users = User.offset(10).limit(5)
এখানে, offset(10) প্রথম ১০টি রেকর্ড বাদ দিবে এবং limit(5) পরবর্তী ৫টি রেকর্ড ফিরিয়ে দিবে।
7. distinct
distinct মেথড ব্যবহার করে ডুপ্লিকেট রেকর্ড ফিল্টার করা যায়। এটি SQL এর DISTINCT এর মতো কাজ করে।
উদাহরণ:
# ডুপ্লিকেট না থাকা নামের তালিকা
users = User.select(:name).distinct
এখানে, distinct ব্যবহারের ফলে name ফিল্ডে কোনও ডুপ্লিকেট রেকর্ড থাকবে না।
8. pluck
pluck মেথড ব্যবহার করে নির্দিষ্ট কলামগুলির মান সরাসরি অ্যারে আকারে নেওয়া হয়, পুরো অবজেক্ট নয়। এটি SQL কুয়েরি পরিচালনার জন্য খুবই কার্যকরী।
উদাহরণ:
# সব ব্যবহারকারীর নামের একটি তালিকা
names = User.pluck(:name)
এখানে, pluck(:name) শুধুমাত্র name ফিল্ডের সমস্ত মান ফিরিয়ে দেবে।
9. group
group মেথড SQL এর GROUP BY ক্লজের মতো কাজ করে। এটি ডেটা একটি নির্দিষ্ট কলাম বা অ্যাট্রিবিউটের ভিত্তিতে গ্রুপ করে এবং গ্রুপের ভিত্তিতে কিছু অপারেশন করতে সাহায্য করে।
উদাহরণ:
# বয়সের ভিত্তিতে গ্রুপ এবং প্রতি গ্রুপে কতজন ব্যবহারকারী রয়েছে
users_by_age = User.group(:age).count
এখানে, group(:age) বয়স অনুযায়ী ব্যবহারকারীদের গ্রুপ করবে এবং count তাদের মধ্যে কতজন আছে তা গণনা করবে।
অন্যান্য Query Methods
10. join
join মেথড ব্যবহার করে বিভিন্ন টেবিলের মধ্যে সম্পর্ক (join) করা যায়। এটি SQL এর JOIN এর মতো কাজ করে এবং একাধিক টেবিলের ডেটা একসাথে আনতে সহায়ক।
উদাহরণ:
# User এবং Post টেবিলের মধ্যে যোগফল
users = User.joins(:posts).where(posts: { published: true })
এখানে, joins(:posts) ব্যবহার করে users টেবিলকে posts টেবিলের সাথে যোগফল (join) করা হয়েছে, যেখানে published: true শর্ত দেওয়া হয়েছে।
11. having
having মেথড SQL এর HAVING ক্লজের মতো কাজ করে এবং এটি শুধুমাত্র সেই রেকর্ডগুলো ফিরিয়ে দেয় যা একটি গ্রুপিং শর্তে পাস হয়।
উদাহরণ:
# বয়সের ভিত্তিতে গ্রুপ করে ৫ জনের বেশি ব্যবহারকারী থাকা গ্রুপ
users = User.group(:age).having('count(age) > 5')
এখানে, having('count(age) > 5') শুধুমাত্র সেই বয়সের গ্রুপগুলো দেখাবে, যেখানে ৫ জনের বেশি ব্যবহারকারী রয়েছে।
সারমর্ম
Ruby on Rails এর Active Record Query Methods ডেটাবেস থেকে ডেটা অনুসন্ধান এবং পরিচালনা করার জন্য শক্তিশালী টুল। মেথডগুলোর মধ্যে where, find, order, limit, pluck, joins ইত্যাদি অন্তর্ভুক্ত রয়েছে, যা SQL-এর মতোই ডেটাবেস কুয়েরি করতে সক্ষম। এই মেথডগুলির সাহায্যে আপনি সহজেই ডেটাবেসের ডেটাকে ফিল্টার, সাজানো, সীমাবদ্ধ, গ্রুপিং এবং অন্যান্য অপারেশন করতে পারেন, যা অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করতে সাহায্য করে।
Read more