Свяжитесь с нами по функциональности в Rails 3 - PullRequest
31 голосов
/ 11 сентября 2010

Я хочу сделать контактную форму в Rails 3 со следующими полями:

  • Имя * * 1004
  • E-mail
  • Заголовок сообщения
  • Тело сообщения

Отправленные сообщения предназначены для перехода на мой адрес электронной почты, поэтому я не обязательно должен хранить сообщения в базе данных. Должен ли я использовать ActionMailer, любой драгоценный камень или плагин для него?

Ответы [ 4 ]

66 голосов
/ 11 сентября 2010

Этот учебник является отличным примером - и это Rails 3

Обновление:

Эта статья являетсялучший пример, чем тот, который я выложил ранее, работает безупречно

Второе обновление:

Я бы также рекомендовал объединить некоторые из методов, описанных в этого Railscast в геме active_attr , где Райан Бейтс проведет вас через процесс настройки модели таблицы для страницы контакта.

Третье обновление:

Я написал свой собственный тестовый пост в блоге об этом

9 голосов
/ 26 апреля 2013

Я обновил реализацию, чтобы она была максимально приближена к спецификации REST.

Базовая настройка

Вы можете использовать mail_form gem .После установки просто создайте модель с именем 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 => "contact@domain.com",
      :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'
1 голос
/ 25 июля 2011

Я не мог заставить код этого примера работать, и я думаю, что это немного усложняет со времени создания модели.

В любом случае, я создал рабочую контактную форму и написал об этом в блогетекст на португальском, но сам код (в основном) на английском http://www.rodrigoalvesvieira.com/formulario-contato-rails/

Примечание: я использовал sendmail, а не SMTP.

0 голосов
/ 09 марта 2016

Вы можете использовать gem Contact Us по этой ссылке: https://github.com/JDutil/contact_us Документация понятна, и вы можете использовать ее просто.

Особенности:

  1. Проверка
  2. Легко / Добавить удалить поля
  3. Простая конфигурация
...