تم بناء هذه الجوهرة أعلى ActiveModel
لعرض كيف يمكنك سحب عمليات التحقق من الصحة والتسمية و i18n
من Rails إلى نماذجك دون الحاجة إلى تنفيذها بنفسك.
يشير ملف README هذا إلى جوهرة MailForm التي سيتم استخدامها في الإصدار 5+ من Rails. للحصول على تعليمات حول كيفية استخدام MailForm في الإصدارات القديمة من Rails، يرجى الرجوع إلى الفروع المتاحة.
يتيح لك MailForm إرسال بريد إلكتروني مباشرة من النموذج. على سبيل المثال، إذا كنت تريد إنشاء نموذج اتصال، فلا يلزمك سوى الأسطر التالية (بما في ذلك البريد الإلكتروني):
class ContactForm < MailForm :: Base
attribute :name , validate : true
attribute :email , validate : / A [^@ s ]+@[^@ s ]+ z /i
attribute :file , attachment : true
attribute :message
attribute :nickname , captcha : true
# Declare the e-mail headers. It accepts anything the mail method
# in ActionMailer accepts.
def headers
{
subject : "My Contact Form" ,
to : "[email protected]" ,
from : %(" #{ name } " < #{ email } >)
}
end
end
ثم تبدأ تشغيل وحدة التحكم باستخدام rails console
واكتب:
>> c = ContactForm . new ( name : 'José' , email : '[email protected]' , message : 'Cool!' )
>> c . deliver
تحقق من صندوق الوارد الخاص بك وسيكون البريد الإلكتروني هناك، مع الحقول المرسلة (على افتراض أنك قمت بتكوين طريقة تسليم البريد بشكل صحيح).
عندما ترث من MailForm::Base
، فإنه يسحب مجموعة من العناصر من ActiveModel
، مثل ActiveModel::Validation
و ActiveModel::Translation
و ActiveModel::Naming
.
يؤدي هذا إلى جلب I18n
ورسائل الخطأ وعمليات التحقق من الصحة والسمات التي يتم التعامل معها كما هو الحال في ActiveRecord
إلى MailForm ، بحيث يمكن استخدام MailForm في وحدات التحكم ومنشئي النماذج لديك دون تعديلات إضافية. وهذا يعني أيضًا أنه بدلاً من ما يلي:
attribute :email , validate : / A [^@ s ]+@[^@ s ]+ z /i
يمكنك فعلا القيام بذلك:
attribute :email
validates_format_of :email , with : / A [^@ s ]+@[^@ s ]+ z /i
اختر الشخص الذي يرضيك أكثر. لمزيد من المعلومات حول واجهة برمجة التطبيقات (API)، يرجى مواصلة القراءة أدناه.
يلعب MailForm بشكل جيد مع ORMs أيضًا. كل ما عليك فعله هو تضمين MailForm::Delivery
في النموذج الخاص بك والإعلان عن السمات التي يجب إرسالها:
class User < ActiveRecord :: Base
include MailForm :: Delivery
append :remote_ip , :user_agent , :session
attributes :name , :email , :created_at
def headers
{
to : "[email protected]" ,
subject : "User created an account"
}
end
end
سيتم تشغيل التسليم في ربط after_create
.
تثبيت MailForm سهل للغاية. ما عليك سوى تعديل ملف Gemfile الخاص بك بإضافة ما يلي:
gem 'mail_form'
ثم قم بتشغيل bundle install
لتثبيت MailForm .
يمكنك تشغيل rails generate mail_form
لعرض معلومات المساعدة حول كيفية إنشاء نموذج أساسي للبدء.
أعلن عن سمات النموذج الخاص بك. سيتم إلحاق كافة السمات المعلنة هنا بالبريد الإلكتروني، باستثناء تلك التي: captcha صحيحة.
خيارات:
:validate
- خطاف لـ validates_*_of
. عندما يتم إعطاء true
، يتم التحقق من صحة وجود السمة. عندما يكون التعبير العادي، يتحقق من صحة التنسيق. عند المصفوفة، يتم التحقق من صحة إدراج السمة في المصفوفة.
عندما يتم إعطاء :validate
، يتم التحقق من التواجد تلقائيًا. أعط allow_blank: true
للتجاوز.
أخيرًا، عندما يكون :validate
رمزًا، سيتم استدعاء الطريقة المعطاة كرمز. وبعد ذلك يمكنك إضافة عمليات التحقق من الصحة كما تفعل في Active Record ( errors.add
).
:attachment
- عند تقديمه، يتوقع إرسال ملف وإرفاقه بالبريد الإلكتروني. لا تنس ضبط النموذج الخاص بك على الكتابة المتعددة. كما أنه يقبل ملفات متعددة من خلال سمة مرفق واحدة، وسيقوم بإرفاقها بشكل فردي بالبريد الإلكتروني.
:captcha
- عندما يكون صحيحًا، يجب أن يكون التحقق من صحة السمات فارغًا. هذه طريقة بسيطة لتجنب البريد العشوائي ويجب إخفاء الإدخال باستخدام CSS.
أمثلة:
class ContactForm < MailForm :: Base
attributes :name , validate : true
attributes :email , validate : / A [^@ s ]+@[^@ s ]+ z /i
attributes :type , validate : [ "General" , "Interface bug" ]
attributes :message
attributes :screenshot , attachment : true , validate : :interface_bug?
attributes :nickname , captcha : true
def interface_bug?
if type == 'Interface bug' && screenshot . nil?
self . errors . add ( :screenshot , "can't be blank on interface bugs" )
end
end
end
c = ContactForm . new ( nickname : 'not_blank' , email : '[email protected]' , name : 'José' )
c . valid? #=> true
c . spam? #=> true (raises an error in development, to remember you to hide it)
c . deliver #=> false (just delivers if is not a spam and is valid, raises an error in development)
c = ContactForm . new ( email : 'invalid' )
c . valid? #=> false
c . errors . inspect #=> { name: :blank, email: :invalid }
c . errors . full_messages #=> [ "Name can't be blank", "Email is invalid" ]
c = ContactForm . new ( name : 'José' , email : '[email protected]' )
c . deliver
يسهل MailForm أيضًا إلحاق معلومات الطلب من العميل بالبريد المرسل. ما عليك سوى القيام بما يلي:
class ContactForm < MailForm :: Base
append :remote_ip , :user_agent , :session
# ...
end
وفي وحدة التحكم الخاصة بك:
@contact_form = ContactForm . new ( params [ :contact_form ] )
@contact_form . request = request
سيتم إرسال عنوان IP البعيد ووكيل المستخدم والجلسة عبر البريد الإلكتروني في جلسة معلومات الطلب. يمكنك إلحاق أي طريقة يستجيب لها كائن الطلب.
يعمل I18n في MailForm كما هو الحال في ActiveRecord، لذلك يمكن استخدام جميع النماذج والسمات والرسائل مع المترجمة. يوجد أدناه ملف مثال لملف I18n:
mail_form :
models :
contact_form : "Your site contact form"
attributes :
contact_form :
email : "E-mail"
telephone : "Telephone number"
message : "Sent message"
request :
title : "Technical information about the user"
remote_ip : "IP Address"
user_agent : "Browser"
لتخصيص قالب البريد الإلكتروني المستخدم، قم بإنشاء ملف يسمى contact.erb
في app/views/mail_form
. ألق نظرة على lib/mail_form/views/mail_form/contact.erb
في هذا الريبو لمعرفة كيفية عمل القالب الافتراضي.
نعتزم الحفاظ على الدعم لجميع إصدارات Ruby / Rails التي لم تصل إلى نهاية عمرها الافتراضي.
لمزيد من المعلومات حول إصدارات محددة، يرجى مراجعة سياسات صيانة Ruby و Rails ومصفوفة الاختبار الخاصة بنا.
إذا اكتشفت أي خطأ، يرجى استخدام أداة تعقب مشكلات github.
رخصة معهد ماساتشوستس للتكنولوجيا. حقوق الطبع والنشر 2020-2024 رافائيل فرانسا، كارلوس أنطونيو دا سيلفا. حقوق الطبع والنشر 2009-2019 بلاتافورماتيك.