وحدات التحكم والإجراءات
معالجة الطلبات
وحدات التحكم والإجراءات درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ما هي وحدة التحكم؟
تستقبل وحدة التحكم طلبًا من الموجّه، وتنفّذ العمل، وتقرّر ما يجب إرساله في المقابل. وهي المنسّق بين النماذج والعروض.
- توجد وحدات التحكم في
app/controllers. - ترث من
ApplicationController. - تُعد كل طريقة عامة إجراءً.
تعريف وحدة تحكم
وحدة التحكم فئة ينتهي اسمها بـ Controller. ووفقًا للاتفاقية، تتولى ArticlesController معالجة مسارات المورد articles.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
endتتوافق الإجراءات مع المسارات
يستدعي كل مسار من مسارات REST السبعة إجراءً مطابقًا. يرسل الموجّه GET /articles إلى index، وGET /articles/1 إلى show، وهكذا. ويساعد إبقاء أسماء الإجراءات متوافقة مع الاتفاقية على توصيل كل شيء تلقائيًا.
تجزئة params
تصل بيانات الطلب في params، وهو كائن شبيه بالتجزئة يحتوي على أجزاء المسار وسلاسل الاستعلام وحقول النموذج. بالنسبة إلى /articles/5، تكون قيمة params[:id] هي "5".
def show
@article = Article.find(params[:id])
endمتغيرات المثيل إلى العروض
تمرّر وحدات التحكم البيانات إلى العروض من خلال متغيرات المثيل، التي تستخدم البادئة @. ويظهر أي @variable يتم تعيينه في الإجراء داخل قالب العرض المطابق.
def index
@articles = Article.all
# @articles is available in index.html.erb
endتنفيذ index وshow
إجراءات القراءة بسيطة: يحمّل index مجموعة، بينما يحمّل show سجلًا واحدًا حسب المعرّف. ثم يعرضان القوالب الافتراضية الخاصة بهما.
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
endتنفيذ create
ينشئ الإجراء create سجلًا من البيانات المُرسلة ويحفظه. وعند النجاح يعيد التوجيه، أما عند الفشل فيعرض النموذج من جديد كي يتمكن المستخدم من إصلاح الأخطاء.
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
endredirect_to في مقابل render
هناك استجابتان مختلفتان تمامًا:
- يطلب
redirect_toمن المتصفح إرسال طلب جديد إلى عنوان URL آخر. - يعيد
renderعرضًا مباشرةً للطلب الحالي.
أعيدوا التوجيه بعد نجاح عملية كتابة، واستخدموا العرض لإظهار نموذج من جديد مع الأخطاء.
الإجراءات السابقة
يعمل before_action على تنفيذ إعداد مشترك قبل إجراءات محددة، مما يقلل التكرار. ومن الاستخدامات الشائعة له تحميل السجل الذي تحتاج إليه إجراءات show وedit وupdate وdestroy.
class ArticlesController < ApplicationController
before_action :set_article, only: [:show, :edit, :update, :destroy]
private
def set_article
@article = Article.find(params[:id])
end
endالمرشحات والمصادقة
يفرض before_action القواعد أيضًا. إذ يمكن لحارس مثل before_action :require_login أن ينفّذ redirect_to login_path ويوقف الإجراء إذا لم يكن المستخدم قد سجّل الدخول، مما يحمي وحدات التحكم كاملةً دفعة واحدة.
before_action :require_login
private
def require_login
redirect_to login_path unless current_user
endالتعامل مع السجلات المفقودة
عندما يتعذر على find العثور على سجل، فإنه يثير RecordNotFound، ويحوّل Rails ذلك إلى استجابة 404 في بيئة الإنتاج. ويمكنكم تخصيص هذا السلوك باستخدام rescue_from لعرض صفحة مناسبة للمستخدم.
rescue_from ActiveRecord::RecordNotFound do
redirect_to articles_path, alert: "Not found"
endاختبار سريع
اختبروا مدى فهمكم لوحدات التحكم.
مراجعة: وحدات التحكم والإجراءات
لقد تعلّمتم كيفية تعامل وحدات التحكم مع الطلبات:
- تتوافق الإجراءات مع المسارات وفقًا للاتفاقية.
- تحمل
paramsبيانات الطلب، وتصل@variablesإلى العرض. - يحفظ
createالسجل ثم يعيد التوجيه أو يعرض النموذج من جديد. - يؤدي
redirect_toوrenderغرضين مختلفين. - يشارك
before_actionالإعدادات ويفرض المصادقة.
سنحافظ بعد ذلك على أمان الإسناد الجماعي باستخدام المعلمات القوية.
الأسئلة الشائعة
هل درس «وحدات التحكم والإجراءات» مجاني؟
نعم — نص درس «وحدات التحكم والإجراءات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.
ماذا ستتعلم في «وحدات التحكم والإجراءات»؟
معالجة الطلبات تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟
لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «وحدات التحكم والإجراءات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟
نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المسارات والموارد
- وحدات التحكم والإجراءات
- المعلمات القوية
- العروض والتصيير