আসুন রেল প্যারামিটার সম্পর্কে কথা বলি!
কেন তারা দরকারী?
ব্যবহারকারীরা আপনার ওয়েব অ্যাপ্লিকেশনে ডেটা পাঠাতে পারে তিনটি ভিন্ন উপায়ে৷
এই তিনটি উপায় হল :
- কোয়েরি প্যারামিটার ব্যবহার করে (
"example.com/?q=bacon"
) - একটি ফর্ম জমা দেওয়া (
"/users/sign_in"
) - ইউআরএলের মধ্যেই (
"/books/1"
)
কিভাবে আপনি Rails থেকে এই ডেটা অ্যাক্সেস করবেন?
params
সহ .
আপনার কন্ট্রোলার অ্যাকশনের ভিতরে আপনি params
কল করতে পারেন অ্যাক্সেস ফর্ম এবং URL ক্যোয়ারী ডেটা করতে .
params
কি , ঠিক?
এটি এমন একটি পদ্ধতি যা একটি ActionController::Parameters
প্রদান করে বস্তু, বাস্তবে এটি অনেকটা হ্যাশের মতো আচরণ করে।
এখন।
ধরা যাক যে আপনি এই params
থেকে একটি মান পড়তে চান হ্যাশ।
এখানে কিভাবে :
params[:id]
আপনি মান পাবেন যদি এটি বিদ্যমান থাকে।
অথবা nil
যদি তা না হয়।
জানার কিছু জিনিস :
- যদি একটি ক্ষেত্র ফাঁকা রাখা হয় আপনি একটি খালি স্ট্রিং পাবেন
- সকল মান
params
এর ভিতরে স্ট্রিং হয় এমনকি যদি সেগুলি পূর্ণসংখ্যা হিসাবে জমা দেওয়া হয়
আসুন রেলের প্যারামে একটু গভীরে তাকাই কারণ আপনি যদি সেগুলি ভালভাবে বুঝতে না পারেন তারা বিভ্রান্তি এবং অদ্ভুত সমস্যার উৎস হতে পারে!
রেল কনভেনশন:ফর্ম ক্ষেত্র এবং পরামস
কিভাবে ফর্ম ফিল্ড এবং URL প্যারামিটারগুলি params
ম্যাপ করে কী?
আমি আপনার জন্য একটি উদাহরণ আছে.
এখানে :
এটি একটি সাধারণ অনুসন্ধান ফর্ম যা /search
এ একটি POST অনুরোধ পাঠাবে৷ .
ফলস্বরূপ, আপনি এই params
পাবেন বস্তু:
{ "q"=>"", "controller"=>"books", "action"=>"search" }
এই "q" কি?
এটি হল HTML ফর্মের ইনপুট ক্ষেত্রের নাম বৈশিষ্ট্য .
নামটি আপনি যা চান তা হতে পারে।
আপনি যদি form_for
ব্যবহার করে আপনার ফর্ম তৈরি করেন সহায়ক পদ্ধতি, নামগুলি আপনার জন্য স্বয়ংক্রিয়ভাবে তৈরি হয় এবং তারা একটি নির্দিষ্ট প্যাটার্ন অনুসরণ করে৷
এখানে একটি উদাহরণ আছে :
কিছু ক্ষেত্র সহ# form_for(@book) with a few fields generates something like this
এই book[title]
ক্ষেত্রের নামের বিন্যাস একটি params
তৈরি করবে হ্যাশ যেখানে মানগুলি নেস্ট করা হবে।
একটি উদাহরণ দিয়ে ব্যাখ্যা করি :
{ "book"=> { "title"=>"", "author"=>"", "cover"=>"", "language"=>"English" } }
ব্যবহারকারী একটি ফাঁকা ফর্ম জমা দেন এবং এটিই আপনি পাবেন৷
৷আপনার কন্ট্রোলার থেকে...
আপনি এভাবে ডেটা অ্যাক্সেস করেন :
params[:book][:language] # "English" params[:book][:author] # ""
মনে রাখবেন যে এটি একটি হ্যাশের মতো আচরণ করে, তবে একটি সাধারণ হ্যাশের বিপরীতে, এটি চিহ্ন এবং স্ট্রিং উভয়কেই সমতুল্য কী হিসাবে গ্রহণ করবে৷
মানে params["book"]
¶ms[:book]
একই।
পরামিতি গ্রহণ করতে আপনার রুট সক্রিয় করা
ক্যোয়ারী প্যারামিটার ছাড়াও, আপনি REST-স্টাইল প্যারামিটারও সক্ষম করতে পারেন।
রেলে, আমরা এটিকে একটি "ডাইনামিক সেগমেন্ট" বলি৷
৷আসুন একটি উদাহরণ দেখি।
যদি আপনার মত একটি রুট থাকে :
get 'books/:id', to: 'books#show'
বা :
resources :books
আপনি এই ধরনের URL ব্যবহার করতে সক্ষম হবেন৷ :
/books/1
তারপর আপনি এই 1
অ্যাক্সেস করতে পারবেন , যা হল id
books/:id
-এ .
params
সহ .
এরকম :
params[:id]
এটি আপনাকে ব্যবহারকারীর সন্ধান করছে এমন নির্দিষ্ট সংস্থান খুঁজে পেতে সহায়তা করবে৷
Book.find(params[:id])
শক্তিশালী পরম বোঝা
পরবর্তী:
আপনি যদি আপনার ডাটাবেসে একটি বস্তু সংরক্ষণ করার চেষ্টা করেন, কিন্তু এটি কাজ করে বলে মনে হয় না।
আপনার রেল সার্ভার লগ দেখুন।
আপনি এটি দেখতে পারেন৷ :
Unpermitted parameter: :language
এর মানে কি?
রেলগুলি "শক্তিশালী পরামিতি" সিস্টেম চালু করেছে, রেল 4-এ একটি সুরক্ষা বৈশিষ্ট্য হিসাবে।
এটি আপনাকে গুণাবলীকে সাদা তালিকাভুক্ত করতে বাধ্য করে যে সংরক্ষণ করা যেতে পারে.
এটি "মাস অ্যাসাইনমেন্ট" নামে পরিচিত একটি সমস্যা প্রতিরোধ করে, যা ক্ষতিকারক ব্যবহারকারীদের admin = true
সেট করতে দেয় , অথবা অন্যান্য ক্ষেত্র সেট করুন যেগুলি সাধারণত তাদের অ্যাক্সেস থাকবে না৷
আপনি এই মত ক্ষেত্রগুলিকে সাদা তালিকাভুক্ত করতে পারেন৷ :
def book_params params.require(:book).permit(:title, :author, :cover, :language) end
এটা কিভাবে কাজ করে?
-
require
পদ্ধতিparams[:book]
এর জন্য সন্ধান করবে এবং একটি ত্রুটি উত্থাপন করুন যদি এটি সেখানে না থাকে। -
permit
পদ্ধতি হল অনুমোদিত (কিন্তু ঐচ্ছিক) বৈশিষ্ট্যের একটি তালিকা।
ফলস্বরূপ, আপনি একটি নতুন params
ফিরে পাবেন এই বৈশিষ্ট্যগুলির সাথে হ্যাশ, কিন্তু এখন সেগুলি ডাটাবেসে সংরক্ষিত হওয়ার জন্য পরিষ্কার৷
উদাহরণ :
Book.create(book_params)
লক্ষ্য করুন যে একটি নিয়মিত রুবি হ্যাশ এই নিরাপত্তা ব্যবস্থাকে বাইপাস করবে৷
উদাহরণ :
Book.create(title: "", author: "", cover: "")
অ্যাট্রিবিউটের নাম (যেমন author
হলে এটি ঠিক হওয়া উচিত ) হার্ডকোড করা হয়।
সারাংশ
আপনি Rails প্যারামিটার সম্পর্কে শিখেছেন, তারা কীভাবে কাজ করে এবং কীভাবে সেগুলি আপনার রেল প্রকল্পগুলিতে সঠিকভাবে ব্যবহার করতে হয়!
এখন আপনার অনুশীলনের পালা, নোট নিন, পর্যালোচনা করুন 🙂
পড়ার জন্য ধন্যবাদ।