Свяжитесь с нами в Rails 3
Я хочу создать контактную форму в Rails 3 со следующими полями:
- Имя
- Email
- Заголовок сообщения
- Тело сообщения
Опубликованные сообщения предназначены для перехода на мой адрес электронной почты, поэтому я не должен хранить сообщения в базе данных. Должен ли я использовать ActionMailer
, любой драгоценный камень или плагин для него?
Ответы
Ответ 1
Этот учебник - отличный пример - и это Rails 3
Update:
Эта статья является лучшим примером, чем тот, который я опубликовал ранее, работает безупречно
Второе обновление:
Я бы также рекомендовал объединить некоторые из методов, описанных в этот railscast на active_attr gem, где Райан Бэйтс проведет вас через процесс настройки табуляции для страницы контакта.
Третье обновление:
Я написал собственное тестовое сообщение в блоге об этом
Ответ 2
Я обновил реализацию как можно ближе к спецификации REST.
Основные настройки
Вы можете использовать жемчуг mail_form. После установки просто создайте модель с именем Message
, аналогичную описанной в документации.
# app/models/message.rb
class Message < MailForm::Base
attribute :name, :validate => true
attribute :email, :validate => /\A([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})\z/i
attribute :message_title, :validate => true
attribute :message_body, :validate => true
def headers
{
:subject => "A message",
:to => "[email protected]",
:from => %("#{name}" <#{email}>)
}
end
end
Это уже позволит вам протестировать отправку писем через консоль.
Страница контактов
Чтобы создать отдельную страницу контакта, сделайте следующее.
# app/controllers/messages_controller.rb
class MessagesController < ApplicationController
respond_to :html
def index
end
def create
message = Message.new(params[:contact_form])
if message.deliver
redirect_to root_path, :notice => 'Email has been sent.'
else
redirect_to root_path, :notice => 'Email could not be sent.'
end
end
end
Настройка маршрутизации.
# config/routes.rb
MyApp::Application.routes.draw do
# Other resources
resources :messages, only: [:index, :create]
match "contact" => "messages#index"
end
Подготовьте форму частично..
// app/views/pages/_form.html.haml
= simple_form_for :contact_form, url: messages_path, method: :post do |f|
= f.error_notification
.form-inputs
= f.input :name
= f.input :email, label: 'Email address'
= f.input :message_title, label: 'Title'
= f.input :message_body, label: 'Your message', as: :text
.form-actions
= f.submit 'Submit'
И визуализируйте форму в виде.
// app/views/messages/index.html.haml
#contactform.row
= render 'form'
Ответ 3
Я не мог заставить код этого примера работать, и я думаю, что это делает вещи немного сложными с момента создания модели.
Anywat, я создал рабочую контактную форму и написал об этом в блоге... текст написан на португальском языке, но сам код (в основном) http://www.rodrigoalvesvieira.com/formulario-contato-rails/
Примечание. Я использовал sendmail, а не SMTP.
Ответ 4
Вы можете использовать Contact Us gem по этой ссылке: https://github.com/JDutil/contact_us
Документация понятна, и вы можете использовать ее просто.
Особенности:
- Проверка
- Легко добавлять/удалять поля
- Простая конфигурация