Rails পার্শিয়াল বছর ধরে আছে, কিন্তু সেগুলো ক্লাঙ্কি হতে পারে যেহেতু সেগুলো কেবল ERB স্নিপেট বিনা কোনো ব্যাকিং অবজেক্ট স্ট্রাকচারের।
সম্প্রতি, ViewComponent এবং Phlex-এর মতো লাইব্রেরিগুলো ভিউ লেয়ার উন্নত করার চেষ্টা করছে টেমপ্লেটগুলোর আরও সিম্যান্টিক স্ট্রাকচার যোগ করে। এগুলো চমৎকার লাইব্রেরি এবং আমি ব্যক্তিগতভাবে প্রায় সব প্রজেক্টে ViewComponent-এ আশ্রয় করি। তবুও, আমি এখনো মনে করি সাধারন Rails পার্শিয়াল অনেক ইউজ কেসের জন্য চমৎকার কাজ করে।
Rails টিম সবসময় তার অফারিং উন্নত করার চেষ্টা করে, তাই চলুন Rails 7.1-এ পরিচয় করানো একটি নতুন ফিচার দেখি: স্ট্রিক্ট লোকালস!
Rails পার্শিয়াল এবং লোকাল ভেরিয়েবল
আমরা Rails পার্শিয়ালে আর্বিট্রারি লোকাল ভেরিয়েবল পাস করতে পারি এবং সেগুলো ম্যাজিক্যালি ব্যবহার করার জন্য উপলব্ধ থাকে।
এটি আইডিয়াল নয়, কারণ একটি বড় ব্লক মার্কআপ থাকলে পার্শিয়ালটি কোন ভেরিয়েবল এক্সেপ্ট করে সেটি অর্ডার করা কঠিন। এছাড়া, যেহেতু ভেরিয়েবলগুলো ডাইনামিক্যালি তৈরি হয়, একটি মিসিং ভেরিয়েবল nil রিটার্ন করবে না বরং একটি এরর কেইস করবে।
মান লিন icon উপরের পার্শিয়ালে অপশনাল ছিল:
আমরা এটিকে রেন্ডার করি:
এটি একটি ActionView::Template::Error তুলবে, মেসেজ undefined local variable or method 'icon' for #<ActionView::Base:0x00000000023078>।
icon অপশনাল সেটি একজন পাঠকের কাছে স্পষ্টও নয়। Rails 7.1 পর্যন্ত, সমাধান ছিল local_assigns হ্যাশ ইনস্পেক্ট করা যেটি সব ইনজেক্টেড লোকাল ভেরিয়েবল ধারণ করে।
এটি উপরের এরর ফিক্স করে কারণ icon ভেরিয়েবলটি এখন সবসময় সেট থাকে।
Rails 7.1 পার্শিয়ালে লোকাল ভেরিয়েবলের কমियोंকে সমাধান করার চেষ্টা করে স্ট্রিক্ট লোকালস কনসেপ্টের মাধ্যমে।
Rails-এ স্ট্রিক্ট লোকালস কী?
Rails 7.1 থেকে শুরু করে, আমরা পার্শিয়ালের শীর্ষে একটি ম্যাজিক কমেন্ট লিখতে পারি, যা ডিফাইন করে কোন লোকাল ভেরিয়েবলগুলো এটি এক্সেপ্ট করে এবং তাদের যেকোনো ডিফল্ট ভ্যালু।
Rails এই কমেন্টটি পার্স করে এবং ডিফাইন করা ভেরিয়েবলগুলো পার্শিয়ালে সেট করে। এখন একটি পাঠকের কাছে স্পষ্টভাবে সহজে বোঝা যায় পার্শিয়ালটি কোন ভেরিয়েবল এক্সেপ্ট করে এবং কোন ডিফল্ট ভ্যালু।
পার্শিয়ালটি এখনও উপরে দেখানো মতো রেন্ডার হবে। title ভেরিয়েবল কল সাইট থেকে বাদ দিয়ে দেখুন কী হয়:
আপনি একটি ArgumentError পাবেন মেসেজ missing local: :title সহ: এর থেকে অনেক বেশি ডিসক্রিপ্টিভ এরর মেসেজ!
স্ট্রিক্ট লোকালস কখন ব্যবহার করবেন
স্ট্রিক্ট লোকালস ফিডলি হতে পারে, তাই এটি সবসময় একটি ভালো আইডিয়া নয় ব্যবহার করা, বিশেষ করে লিগ্যাসি অ্যাপে।
একটি ইউজ কেস নিই যেটি স্ট্রিক্ট লোকালসের জন্য পেরফেক্ট। মনে করুন আমাদের একটি পার্শিয়াল আছে যা একটি ইউজারের ডিটেইলস একটি কার্ড-এ দেখাচ্ছে, কিন্তু শুধু অ্যাডমিনরা দেখতে পান তারা কখন লাস্ট সাইন ইন করেছিল:
এই পার্শিয়াল বেশ কিছু ভেরিয়েবল নেয় এবং একটি অপশনাল ভেরিয়েবল আছে, যা স্ট্রিক্ট লোকালসের জন্য একটি পেরফেক্ট কেস। নিচের ম্যাজিক কমেন্টটি ফাইলে যোগ করলে এটি উল্লেখযোগ্যভাবে সহজে স্কিম করা যায়:
একটি মডেলের অ্যাসোসিয়েটেড পার্শিয়ালের কেসে (যেমন posts/_post.html.erb), এটা ফেরই স্পষ্ট যে এমন পার্শিয়াল একটু post ভেরিয়েবল এক্সেপ্ট করে। আমি মনে করি স্ট্রিক্ট লোকালস এগুলো কেসের জন্য যেন আবশ্যক নয়।
স্ট্রিক্ট লোকালস গচহা
কয়েকটি গচহা আছে যেগুলোর oppors সতর্ক থাকা উচিত, যাইহোক আমি স্ট্রিক্ট লোকালস সব জায়গায় ব্যবহার করার সুপারিশ করি না।
অন молিচে একটি কালেকশন রেন্ডার করা
অন মলিচে একটি কালেকশন রেন্ডার করার সময়:
Rails _post পার্শিয়ালে post ভেরিয়েবলের পাশাপাশি দুটি ভেরিয়েবল ইনজেক্ট করে। Rails 7.1.2-এর আগে, এগুলোর ম্যানুয়ালি ডিফাইন করা দরকার ছিল এরর প্রতিরোধের জন্য:
এই সমস্যা Rails 7.1.2-এ ফিক্স করা হয়েছে এবং এই ভেরিয়েবলগুলো এখন অপশনাল (তবে জানা ভালো যে সেগুলো এক্সিস্ট করে যদি দরকার পড়ে)!
ActionCable-এ ব্রডকাস্টিং
একটি ActiveRecord কলব্যাক থেকে ActionCable-এ একটি পার্শিয়াল ব্রডকাস্ট করার সময়:
আপনাকে একটি request_id লোকাল ভেরিয়েবল ডিফল্ট করে nil স্পেসিফাই করতে হবে, যেহেতু এটি Rails-র আন্ডার দ্য হুড ব্যবহার করা হয়।
এটি না করলে কলব্যাক ট্রিগার হলে একটি এরর হবে।
এবং আমাদের হুইসেল-স্টপ টুর শেষ!
কয়েকটি জিনিস মনে রাখার
বিদ্যমান পার্শিয়ালে স্ট্রিক্ট লোকালস যোগ করা একটি দেওয়া ফাইলের জন্য অল-অর-নথিং প্রপোজিশন। আমরা ক্রমাগত ভেরিয়েবল একটি ম্যাজিক কমেন্টে যোগ করতে পারি না যেমনি সেগুলো খুঁজে পাচ্ছি। উপরের গচহাগুলো দেখানো হয়েছে, ম্যাজিক কমেন্টে ডিক্লেয়ার করা প্রয়োজন সকল ভেরিয়েবল অর্জান করা কঠিন হতে পারে।
স্ট্রিক্ট লোকালস কোড সম্পর্কে রিজন করা কতটুকু সহজ করে তোলে সেটি देखে, আমি মনে করি সেগুলো নিউ অ্যাপে ব্যাপকভাবে ব্যবহার করা উচিত (এবং প্রগতিশীলভাবে লিগ্যাসি অ্যাপে রেট্রোएक্টিভলি যোগ করা)।
এটি গুরুত্বপূর্ণ নিশ্চিত করা যে আপনার টেস্ট স্যুট লিগ্যাসি অ্যাপে সেই পার্শিয়ালগুলোর ওপর কভার করে যেগুলোতে আপনি স্ট্রিক্ট লোকালস যোগ করছেন। একটি অমিশন এক্সেপশন কেইস করবে, তাই আপনাকে নিশ্চিত হতে হবে আপনি সকল ইউজ কেস টেস্ট করছেন ডিপ্লয় করার আগে।
যদি আমি ম্যাজিক কমেন্ট অ্যাপ্রোচের বড় ফ্যান নও হই (যেহেতু আমি মনে করি কমেন্ট কখনো ফাংশনালিটি 갖고 উচিত নয়), আমি মনে করি স্ট্রিক্ট লোকালস Rails-এ একটি চমৎকার সংযোজন। পার্শিয়ালে লোকালস অ্যাসাইন করা সবসময় ফিডলি ছিল এবং এগুলো সেটি সহজ করে দিয়েছে। শুধু গচহাগুলোকে সতর্ক থাকুন!
উপসংহার
এই পোস্টে, আমরা Rails 7.1-এ স্ট্রিক্ট লোকালসের ওপর একটি কুইক লুক নিলাম। আমরা পার্শিয়াল এবং লোকাল ভেরিয়েবল কীভাবে কাজ করে সেটি দেখেছিলাম স্ট্রিক্ট লোকালস এক্সপ্লোর করার আগে এবং কিছু গচহা।
হ্যাপি কোডিং!
P.S. আপনি যদি Ruby Magic পোস্টগুলো প্রেস থেকে বের होते হই পড়তে চান, আমাদের Ruby Magic নিউজলেটার সাবস্ক্রাইব করুন এবং কখনো একটি পোস্ট মিস করবেন না!

Ayush Newatia
অতিথি লেখক Ayush একজন ফ্রিল্যান্স Ruby এবং Rails ডেভেলপার। তিনি The Rails and Hotwire Codex-এর লেখক এবং Bridgetown কোর টিমের অংশ। তিনি একটি প্রাইভেসি-ফোকাসড মেইলিং লিস্ট অ্যাপ Scattergun-ও চালান।
Ayush Newatia-এর সকল আর্টিকেল