Rails-এর সাথে কাজ করাকে এত সুন্দর করে তোলে এমন একটি বিষয় হল যে কোনও সাধারণ প্রোগ্রামিং প্রয়োজনের জন্য---অনুমোদন, সাইট প্রশাসন, ইকমার্স, আপনি এটির নাম দেন---আপনার চেয়ে বুদ্ধিমান কেউ সম্ভবত আপনার সমস্যার সমাধান কোড করেছেন এবং প্যাকেজ করেছেন রত্ন আকারে।
আপনি অবশ্যই আপনার জেমফাইলে রত্ন যোগ করতে পারেন এবং সেগুলি কীভাবে কাজ করে তা না বুঝেই তাদের উপযোগিতার সম্পূর্ণ সুবিধা নিতে পারেন, কিন্তু আপনি কি কখনও কৌতূহলী হয়েছিলেন যে কীভাবে এটি সব তারের হয়ে যায়?
এখানে আমরা রায়ান বেটসের ক্যানক্যান অনুমোদন রত্নটি ঘনিষ্ঠভাবে দেখব এবং নিম্নলিখিত প্রশ্নের উত্তর দেব (যা যদি আরও বিস্তৃতভাবে জিজ্ঞাসা করা হয় তবে যে কোনও রত্নটির ক্ষেত্রে প্রযোজ্য হতে পারে):
-
ক্যানক্যানের কোড কোথায় সংরক্ষণ করা হয়?
-
can?
কোথায় পদ্ধতি সংজ্ঞায়িত? -
কখন/কোথায়/কীভাবে রেল ক্যানক্যানের জন্য কোড লোড করে?
প্রথমে, আমার জেমফাইলে ক্যানক্যান আছে এবং আমি একটি bundle install
করি :
# Gemfile
gem "cancan", "~> 1.6.10"```
$ bundle install
বান্ডলারের সাহায্যে কোন বিশেষ রত্ন কোথায় থাকে তা দেখা সত্যিই সহজ। শুধু bundle show
ব্যবহার করুন :
$ bundle show cancan
/Users/jasonswett/.rvm/gems/ruby-2.0.0-p0/gems/cancan-1.6.10
যে প্রশ্ন # 1 যত্ন নেয়. এখন কোথায় can?
সংজ্ঞায়িত?
$ cd /Users/jasonswett/.rvm/gems/ruby-2.0.0-p0/gems/cancan-1.6.10
$ grep -r 'def can?' *
lib/cancan/ability.rb: def can?(action, subject, *extra_args)
lib/cancan/controller_additions.rb: def can?(*args)
দেখে মনে হচ্ছে আসলে দুটি ভিন্ন can?
আছে ফাংশন আমরা যেটির প্রতি আগ্রহী তা হল lib/cancan/ability.rb
.
# lib/cancan/ability.rb
def can?(action, subject, *extra_args)
match = relevant_rules_for_match(action, subject).detect do |rule|
rule.matches_conditions?(action, subject, extra_args)
end
match ? match.base_behavior : false
end
যতদূর পর্যন্ত এখানে আসলে কি ঘটছে, আপনার অনুমান আমার হিসাবে ভাল, কিন্তু যে গুরুত্বপূর্ণ অংশ নয়. এখানে টেকঅওয়ে হল যে আপনি যদি একটি রত্ন নিয়ে কিছু সমস্যার মুখোমুখি হন, তাহলে আপনি এখন রত্নটির কোডটি খনন করার জন্য প্রস্তুত আছেন যা বোঝার চেষ্টা করতে পারেন কি হচ্ছে৷
এখন যেহেতু আমরা জানি একটি রত্ন কোড কোথায় রাখা হয় এবং কীভাবে এটিতে প্রবেশ করতে হয়, রেলগুলি কীভাবে একটি রত্ন সম্পর্কে জানে এবং কখন এটি একটি রত্ন কোড লোড করে?
এটি রেল ইনিশিয়ালাইজেশন ডকুমেন্টেশনের একটি নির্দিষ্ট বিভাগে আচ্ছাদিত। এখানে প্রাসঙ্গিক অংশ:
একটি স্ট্যান্ডার্ড রেল অ্যাপ্লিকেশনে, একটি জেমফাইল রয়েছে যা অ্যাপ্লিকেশনটির সমস্ত নির্ভরতা ঘোষণা করে। config/boot.rb এই ফাইলের অবস্থানে ENV['BUNDLE_GEMFILE'] সেট করে। যদি জেমফাইল বিদ্যমান থাকে, তাহলে বান্ডলার/সেটআপ প্রয়োজন।
এটি প্রারম্ভিক প্রক্রিয়ার প্রথম দিকে ঘটে:দ্বিতীয় ধাপ, সঠিক হতে। এটি বোধগম্য কারণ যদি আপনার প্রকল্প একটি নির্দিষ্ট মণির উপর নির্ভর করে, কে জানে আপনি এটি কোথায় উল্লেখ করতে পারেন। যত তাড়াতাড়ি সম্ভব এটি লোড করা ভাল যাতে এর কোড যে কোনও জায়গায় ব্যবহার করা যায়৷
৷