0Pricing
Ruby Academy · درس

التحققات والاستعلامات

سلامة البيانات والاستعلام

التحققات والاستعلامات درس مجاني في Ruby Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ruby Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ruby Academy 4 دروس في المجموع.

لماذا نتحقق؟

تحمي عمليات التحقق بياناتكم قبل وصولها إلى قاعدة البيانات. وتعمل عند حفظ سجل، وترفض البيانات غير الصالحة مع عرض رسائل مفيدة.

  • تمنع البيانات غير الصالحة من الدخول، مثل الأسماء المفقودة ورسائل البريد الإلكتروني ذات التنسيق غير الصحيح.
  • تعمل في Ruby، لذا يسهل عرض الرسائل للمستخدمين.
  • تكمّل قيود قاعدة البيانات ولا تحل محلها.

التحقق من الوجود

القاعدة الأكثر شيوعًا هي validates :field, presence: true، وهي تفرض وجود قيمة غير فارغة. ويفشل الحفظ من دونها، مع تسجيل خطأ.

class User < ApplicationRecord
  validates :name, presence: true
end

# User.create(name: "") fails to save

التحقق من التفرد

تمنع uniqueness: true القيم المكررة، مثل وجود مستخدمين لهما عنوان البريد الإلكتروني نفسه. استخدموها مع فهرس فريد في قاعدة البيانات، لأن التحقق وحده يكون عرضة لحالة سباق عند التزامن الكثيف.

class User < ApplicationRecord
  validates :email, presence: true, uniqueness: true
end

التنسيق والطول

ومن أدوات التحقق المضمّنة الأخرى:

  • length: { minimum: 8 } لفرض حدود الطول.
  • format: { with: /regex/ } للتحقق من الأنماط.
  • numericality: true للتحقق من الأرقام.
  • inclusion: { in: [...] } للتحقق من القيم المسموح بها.
class User < ApplicationRecord
  validates :password, length: { minimum: 8 }
  validates :age, numericality: { greater_than: 0 }
end

valid? وerrors

استدعوا valid? لتشغيل عمليات التحقق من دون حفظ. بعد فشل الحفظ، يحتوي record.errors على المشكلات، بينما يوفر errors.full_messages نصوصًا واضحة لواجهة المستخدم.

user = User.new(name: "")
if user.valid?
  user.save
else
  puts user.errors.full_messages
end

save في مقابل save!

هناك أسلوبان للحفظ:

  • يعيد save القيمة true/false، ولذلك يمكنكم اتخاذ قرار بناءً على النتيجة.
  • يثير save! الاستثناء RecordInvalid عند الفشل، ويكون مفيدًا عندما ينبغي التعامل مع البيانات غير الصالحة كاستثناء.

ينطبق النمط نفسه على create/create! وupdate/update!.

user.save   # => false if invalid
user.save!  # => raises if invalid

عمليات التحقق المخصصة

للقواعد التي تتجاوز أدوات التحقق المضمّنة، اكتبوا طريقة وسجّلوها باستخدام validate. أضيفوا المشكلات عبر errors.add.

class User < ApplicationRecord
  validate :name_not_admin

  def name_not_admin
    if name == "admin"
      errors.add(:name, "cannot be admin")
    end
  end
end

الاستعلام باستخدام where

تبدأ واجهة الاستعلام باستخدام where، الذي يرشّح الصفوف. ويعيد علاقة لا تُنفَّذ فورًا، ويمكنكم مواصلة تسلسل الاستدعاءات عليها قبل الوصول إلى قاعدة البيانات.

User.where(active: true)
User.where("age > ?", 18)
User.where(role: ["admin", "editor"])

الترتيب وتحديد العدد

شكّلوا النتائج باستخدام طرق قابلة للتسلسل:

  • ترتّب order(created_at: :desc) النتائج.
  • يُستخدم limit(10) وoffset(20) لتقسيم النتائج إلى صفحات.
  • يختار select(:id, :name) أعمدةً محددة.
User.where(active: true)
    .order(created_at: :desc)
    .limit(10)

الدوال التجميعية والتحميل الكسول

تشغّل الأدوات التجميعية دوال قاعدة البيانات: count وsum(:amount) وaverage(:age) وmaximum وminimum. تكون العلاقات كسولة؛ فلا يُنفَّذ الاستعلام إلا عند استعراض العناصر، أو استدعاء دالة تجميعية، أو استخدام to_a.

User.where(active: true).count
Order.sum(:total)
User.average(:age)

النطاقات

يسمّي النطاق استعلامًا قابلًا لإعادة الاستخدام، حتى تتمكنوا من تركيبه بطريقة واضحة. وتعيد النطاقات علاقات، ويمكن تسلسلها معًا ومع where.

class User < ApplicationRecord
  scope :active, -> { where(active: true) }
  scope :adults, -> { where("age >= ?", 18) }
end

User.active.adults

اختبار سريع

اختبروا مدى فهمكم لعمليات التحقق والاستعلامات.

مراجعة: عمليات التحقق والاستعلامات

لقد تعلّمتم حماية البيانات واسترجاعها:

  • تحمي عمليات التحقق مثل الوجود والتفرد والطول والتنسيق عمليات الحفظ.
  • تعرض valid? وerrors المشكلات، بينما يثير save! استثناءً.
  • تغطي عمليات التحقق المخصصة القواعد الخاصة.
  • تُستخدم where وorder وlimit والدوال التجميعية والنطاقات لبناء استعلامات كسولة.

وبذلك تكتمل دورة النماذج وActive Record.

الأسئلة الشائعة

هل درس «التحققات والاستعلامات» مجاني؟

نعم — نص درس «التحققات والاستعلامات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ruby Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ruby Academy 4 دروس في المجموع.

ماذا ستتعلم في «التحققات والاستعلامات»؟

سلامة البيانات والاستعلام تتمرن على Ruby Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Ruby Academy؟

لا تُشترط خبرة سابقة. Ruby Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «التحققات والاستعلامات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Ruby Academy هذا؟

نعم. كل درس في Ruby Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

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

  1. أساسيات Active Record
  2. عمليات الترحيل
  3. الارتباطات
  4. التحققات والاستعلامات
← العودة إلى Ruby Academy