Dieses Juwel wurde auf ActiveModel
aufgebaut, um zu zeigen, wie Sie Validierungen, Benennung und i18n
von Rails in Ihre Modelle integrieren können, ohne alles selbst implementieren zu müssen.
Diese README-Datei bezieht sich auf das MailForm- Gem, das in Rails 5+ verwendet werden soll. Anweisungen zur Verwendung von MailForm in älteren Versionen von Rails finden Sie in den verfügbaren Zweigen.
Mit MailForm können Sie eine E-Mail direkt aus einem Formular senden. Wenn Sie beispielsweise ein Kontaktformular erstellen möchten, sind lediglich die folgenden Zeilen erforderlich (einschließlich der E-Mail):
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
Dann starten Sie eine Konsole mit rails console
und geben Folgendes ein:
>> c = ContactForm . new ( name : 'José' , email : '[email protected]' , message : 'Cool!' )
>> c . deliver
Überprüfen Sie Ihren Posteingang und die E-Mail mit den gesendeten Feldern wird dort sein (vorausgesetzt, Sie haben Ihre Mailer-Zustellungsmethode richtig konfiguriert).
Wenn Sie von MailForm::Base
erben, werden eine Reihe von Dingen aus ActiveModel
abgerufen, z. B. ActiveModel::Validation
, ActiveModel::Translation
und ActiveModel::Naming
.
Dies bringt I18n
, Fehlermeldungen, Validierungen und Attributverarbeitung wie in ActiveRecord
in MailForm , sodass MailForm in Ihren Controllern und Formular-Buildern ohne zusätzliche Optimierungen verwendet werden kann. Das bedeutet auch, dass statt folgendem:
attribute :email , validate : / A [^@ s ]+@[^@ s ]+ z /i
Sie könnten tatsächlich Folgendes tun:
attribute :email
validates_format_of :email , with : / A [^@ s ]+@[^@ s ]+ z /i
Wählen Sie diejenige aus, die Ihnen am meisten gefällt. Weitere Informationen zur API finden Sie weiter unten.
MailForm funktioniert auch gut mit ORMs. Sie müssen lediglich MailForm::Delivery
in Ihr Modell einbinden und angeben, welche Attribute gesendet werden sollen:
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
Die Lieferung wird in einem after_create
Hook ausgelöst.
Die Installation von MailForm ist sehr einfach. Bearbeiten Sie einfach Ihre Gemfile und fügen Sie Folgendes hinzu:
gem 'mail_form'
Führen Sie dann bundle install
aus, um MailForm zu installieren.
Sie können rails generate mail_form
ausführen, um Hilfeinformationen zum Generieren eines Basisformulars anzuzeigen und Ihnen den Einstieg zu erleichtern.
Deklarieren Sie Ihre Formularattribute. Alle hier deklarierten Attribute werden an die E-Mail angehängt, mit Ausnahme derjenigen, bei denen :captcha wahr ist.
Optionen:
:validate
– Ein Hook für validates_*_of
. Wenn true
angegeben wird, wird das Vorhandensein des Attributs überprüft. Bei einem regulären Ausdruck wird das Format überprüft. Beim Array wird die Aufnahme des Attributs in das Array überprüft.
Immer wenn :validate
angegeben wird, wird die Anwesenheit automatisch überprüft. Geben Sie allow_blank: true
zum Überschreiben an.
Wenn schließlich :validate
ein Symbol ist, wird die als Symbol angegebene Methode aufgerufen. Anschließend können Sie Validierungen wie in Active Record ( errors.add
) hinzufügen.
:attachment
– Wenn angegeben, wird erwartet, dass eine Datei gesendet wird, und diese an die E-Mail angehängt werden. Vergessen Sie nicht, Ihr Formular auf Multitype einzustellen. Es akzeptiert auch mehrere Dateien über ein einziges Anhangsattribut und hängt sie einzeln an die E-Mail an.
:captcha
– Wenn true, wird überprüft, dass die Attribute leer sein müssen. Dies ist eine einfache Möglichkeit, Spam zu vermeiden und die Eingabe sollte mit CSS ausgeblendet werden.
Beispiele:
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 erleichtert auch das Anhängen von Anfrageinformationen des Kunden an die gesendete E-Mail. Sie müssen nur Folgendes tun:
class ContactForm < MailForm :: Base
append :remote_ip , :user_agent , :session
# ...
end
Und in deinem Controller:
@contact_form = ContactForm . new ( params [ :contact_form ] )
@contact_form . request = request
Die Remote-IP, der Benutzeragent und die Sitzung werden in der E-Mail in einer Anforderungsinformationssitzung gesendet. Sie können jede Methode anhängen, auf die das Anforderungsobjekt antwortet.
I18n in MailForm funktioniert wie in ActiveRecord, sodass alle Modelle, Attribute und Nachrichten lokalisiert verwendet werden können. Unten finden Sie eine Beispieldatei für eine I18n-Datei:
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"
Um die verwendete E-Mail-Vorlage anzupassen, erstellen Sie eine Datei namens contact.erb
in app/views/mail_form
. Schauen Sie sich lib/mail_form/views/mail_form/contact.erb
in diesem Repo an, um zu sehen, wie die Standardvorlage funktioniert.
Wir beabsichtigen, den Support für alle Ruby-/Rails-Versionen aufrechtzuerhalten, die noch nicht das Ende ihrer Lebensdauer erreicht haben.
Weitere Informationen zu bestimmten Versionen finden Sie in den Wartungsrichtlinien von Ruby und Rails sowie in unserer Testmatrix.
Wenn Sie einen Fehler entdecken, verwenden Sie bitte den Github Issues Tracker.
MIT-Lizenz. Copyright 2020-2024 Rafael França, Carlos Antônio da Silva. Copyright 2009-2019 Plataformatec.