Этот драгоценный камень был создан поверх ActiveModel
чтобы продемонстрировать, как вы можете использовать проверки, именование и i18n
из Rails в своих моделях без необходимости реализовывать все это самостоятельно.
Этот README относится к гему MailForm , который будет использоваться в Rails 5+. Инструкции по использованию 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 также хорошо работает с ORM. Вам просто нужно включить 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 is true.
Параметры:
:validate
— перехватчик для validates_*_of
. Если задано true
, проверяется наличие атрибута. Если регулярное выражение, проверяет формат. Когда массив, проверяет включение атрибута в массив.
Всякий раз, когда указывается :validate
, присутствие проверяется автоматически. allow_blank: true
для переопределения.
Наконец, когда :validate
является символом, будет вызван метод, заданный как символ. Затем вы можете добавить проверки, как в Active Record ( errors.add
).
:attachment
— если задано, ожидает отправки файла и прикрепляет его к электронному письму. Не забудьте настроить форму на многотипность. Он также принимает несколько файлов через один атрибут вложения и прикрепляет их к электронному письму по отдельности.
:captcha
— если true, атрибуты должны быть пустыми. Это простой способ избежать спама, и вводимые данные следует скрыть с помощью 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.
Лицензия МТИ. Copyright 2020-2024 Рафаэль Франса, Карлос Антониу да Силва. Copyright 2009-2019 Платаформатек.