0Pricing
Ruby Academy · درس

وحدات التحكم والإجراءات

معالجة الطلبات

وحدات التحكم والإجراءات درس مجاني في 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
end

redirect_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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. المسارات والموارد
  2. وحدات التحكم والإجراءات
  3. المعلمات القوية
  4. العروض والتصيير
← العودة إلى Ruby Academy