ফ্ল্যাশ মেসেজ কী?
এক ফ্ল্যাশ মেসেজ হলো আপনার রেলস অ্যাপ্লিকেশনের ব্যবহারকারীদের সাথে তথ্য যোগাযোগ করার একটি উপায় যাতে তারা জানতে পারে তাদের অ্যাকশনের ফলাফলে কী ঘটেছে।
উদাহরণ মেসেজ:
- “Password changed correctly” (কনফার্মেশন)
- “User not found” (এরর)
আপনি এই ফ্ল্যাশ মেসেজগুলো আপনার কন্ট্রোলারগুলোতে সেট করেন, তারপর আপনার ভিউগুলোর মধ্যে সেগুলো রেন্ডার করেন। আপনার ব্যবহারকারীরা তারপর অনুযায়ী কাজ করতে পারেন।
চলুন সঠিকভাবে কীভাবে এটি কাজ করে তা শিখি!
ফ্ল্যাশ মেসেজ কীভাবে ব্যবহার করবেন
আপনি এই নোটিফিকেশন মেসেজগুলো flash হেল্পার মেথড দিয়ে ব্যবহার করতে পারেন।
এটি একটি রুবি হ্যাশের মতো আচরণ করে।
ফ্ল্যাশ অবজেক্টে keys, any? বা each এর মতো মেথড থাকে এবং আপনি [] দিয়ে একটি নির্দিষ্ট মেসেজ অ্যাক্সেস করতে পারেন।
আপনি কী টাইপের ফ্ল্যাশ মেসেজ সেট করতে পারেন?
ডিফল্টভাবে আপনার কাছে আছে:
- notice
- alert
এখানে কীভাবে ব্যবহার করবেন তার একটি উদাহরণ:
flash.alert = "User not found."
অথবা আপনি পছন্দ করলে:
flash[:alert] = "User not found."
(শুধু স্টাইলের পার্থক্য।)
আপনি এই কোডটি আপনার কন্ট্রোলার অ্যাকশনে ব্যবহার করতে পারেন, যেমন index, create, new, ইত্যাদি।
আরেকটি উপায় হলো:
redirect_to :books_path, notice: "Book not found"
এটি আপনাকে রিডায়রেক্ট এবং একই স্টেপে একটি ফ্ল্যাশ মেসেজ তৈরি করতে দেয়।
ভালো!
Alert vs Notice
যে লগোকে আমি বুঝি, alert বা notice ব্যবহার করলে খুব বেশি পার্থক্য হয় না।
আপনার পরিস্থিতির জন্য যা আরও প্রাকৃতিক লাগে সেটি ব্যবহার করুন।
আমি alert-কে একটি এরর মেসেজ এবং notice-কে একটি কনফার্মেশন মেসেজ হিসেবে ভাবতে পছন্দ করি।
সেগুলো আলাদা রাখতে আপনাকে সেগুলো আলাদা স্টাইল করতে সাহায্য করে।
উদাহরণস্বরূপ:
আপনি alerts লাল এবং notices সবুজে দেখাতে পারেন।
আপনার নিজস্ব ফ্ল্যাশ টাইপ তৈরি করাও সম্ভব add_flash_types কন্ট্রোলার মেথড ব্যবহার করে।
এভাবে:
class ApplicationController add_flash_types :info, :error, :warning end
আমি জিনিসপত্র সিম্পল রাখতে পছন্দ করি, তাই বিল্ট-ইন টাইপগুলো ব্যবহার করি 🙂
ফ্ল্যাশ মেসেজ রেন্ডার করা
ফ্ল্যাশ মেসেজ অটোমেটিক্যালি দেখায় না।
আপনাকে আপনার ভিউগুলোর একটি ভিতরে সেগুলো রেন্ডার করতে হবে যাতে ব্যবহারকারীরা সেগুলো দেখতে পারে।
আপনার অ্যাপ্লিকেশন লেআউটে এটি যোগ করার কথা বিবেচনা করুন।
এখানে একটি কোড উদাহরণ:
<% flash.each do |type, msg| %> <%= msg %> <% end %>
এটি যেখানেই আপনি আপনার নোটিশ দেখাতে চান সেখানে রাখুন, সাধারণত পেজের উপরে, মেনু বারের নিচে।
মনে রাখবেন:
একবার আপনি একটি মেসেজ রেন্ডার করলে সেটি flash- থেকে রিমুভ হয়ে যাবে, তাই এটি دوبারো দেখাবে না।
নোটিশ ও অ্যালার্ট মেসেজ স্টাইল করা
ফ্ল্যাশ মেসেজের কোনো বিল্ট-ইন ডিজাইন বা স্টাইল নেই।
সমাধান?
আপনি যদি বুটস্ট্র্যাপ ব্যবহার করেন, তবে "alert alert-info" CSS ক্লাস ব্যবহার করে ফ্ল্যাশ মেসেজকে ভালো লুক দিতে পারেন।
উদাহরণ:
<% flash.each do |type, msg| %> <%= msg %> <% end %>
এটি এইরকম দেখায়:

আপনি যদি বুটস্ট্র্যাপ ব্যবহার না করেন, তবে আপনি নিজের CSS লিখে এটি আপনার পছন্দমত লুক দিতে পারেন।
ফ্ল্যাশ মেসেজ কখন রেন্ডার হয়?
ফ্ল্যাশ মেসেজ শুধু আপনার নেক্সট কন্ট্রোলার অ্যাকশনে রিমুভ হয়, আপনি সেগুলো ডিসপ্লে করার পর।
ইমপ্লিকেশন:
- আপনি
redirect_toকরলে, তারপর একটিflashমেসেজ রেন্ডার করলে, সেটি ভালো - আপনি
redirect_toকরেন এবং মেসেজ রেন্ডার না করেন, তবে মেসেজflashহ্যাশে থাকবে - আপনি
renderকরেন একই অ্যাকশনে যেখানে আপনিflashমেসেজ সেট করছেন, সেটিflashমেসেজ উপলব্ধ থাকবে, কিন্তু রিমুভ হবena তাই এটি থাকে যাবে এবং সম্ভবত দুবার দেখাবে
তাহলে…
আপনি যদি কারেন্ট অ্যাকশনের জন্য ফ্ল্যাশ মেসেজ সেট করতে চান?
সেটাই flash.now কাজে আসে!
এখানে একটি উদাহরণ:
def index @books = Book.all flash.now[:notice] = "We have exactly #{@books.size} books available." end এটি index ভিউ রেন্ডার করবে।
notice মেসেজটি দেখাবে এবং flash- থেকে রিমুভ হয়ে যাবে তাই এটি দুবার দেখাবে না।
অন্য কথায়:
আপনাকে শুধু flash.now ব্যবহার করতে হবে যদি আপনি render করতে যান redirect_to-র পরিবর্তে।
সারাংশ
আপনি রেলসে ফ্ল্যাশ মেসেজ এবং সেগুলো সঠিকভাবে কীভাবে ব্যবহার করতে হয় সেটি শিখেছেন!
বিটিডব্লিউ, ফ্ল্যাশ মেসেজ ভ্যালিডেশন এররের মতো নয়। ভ্যালিডেশন মডেল অবজেক্টের সাথে অ্যাসোসিয়েটেড, এবং আপনি এই ভ্যালিডেশন মেসেজগুলো errors মেথড দিয়ে অ্যাক্সেস করেন, যেমন @user.errors।
এখন আপনার পালা কিছু কোড লিখে এটি প্র্যাকটিসে লাগানোর।
পড়ার জন্য ধন্যবাদ!