Свяжитесь с нами, функциональность в Rails 3

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

  • Имя
  • Электронное письмо
  • Заголовок сообщения
  • Тело сообщения

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


person rodrigoalvesvieira    schedule 11.09.2010    source источник
comment
Вам также может быть интересно прочитать о контактных формах Restful: robots.thoughtbot.com /post/159807170/restful-contact-forms   -  person sivabudh    schedule 29.09.2011


Ответы (4)


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

Обновление:

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

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

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

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

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

person stephenmurdoch    schedule 11.09.2010
comment
Это устарело и использует ненужную модель поддержки. Хотя все же +1, так как это улучшило мое понимание :) - person Abe Petrillo; 20.01.2012
comment
Согласен, Абэ, я добавил несколько новых ссылок и т. д. - person stephenmurdoch; 04.06.2012
comment
Вы случайно не знаете, как i18n-ize attr_accessors, описанный в модели статьи, на которую вы ссылаетесь? Я определил следующее в .yml, но это игнорируется в соответствующем сообщении об ошибке. de.activerecord.attributes.message.subject: Betreff - person user569825; 11.06.2012
comment
Вы ссылаетесь на ActiveRecord в своем переводе. Я думаю, вам нужно использовать ActiveModel. Попробуйте de.activemodel.attributes.message.subject: Betreff и внесите необходимые изменения в файл локали. Также может помочь добавление extend ActiveModel::Translation к вашей модели, но я не знаю, является ли это абсолютно необходимым. См. связанную с этим проблему с github - person stephenmurdoch; 11.06.2012

Я обновил реализацию, чтобы она была как можно ближе к спецификации 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'
person JJD    schedule 26.04.2013
comment
Я пробую это, но где вы размещаете свою конфигурацию SMTP. И эти контактные формы могут работать в локальной среде? - person Stanmx; 24.07.2013
comment
@Stanmx Конфигурация SMTP переходит в config/environment/development.rb или ../production.rb. В документации описывается настройка GMail, которая также работает. при работе на локальном хосте. - person JJD; 24.07.2013
comment
Спасибо @JJD, я начинаю с другого примера, но каждый раз, когда я отправляю, я получаю: неправильный аргумент (Fixnum)! (Ожидаемый тип OpenSSL::SSL::SSLContext) - person Stanmx; 24.07.2013
comment
@Stanmx Пожалуйста, откройте новый вопрос, описывающий вашу настройку. Не стесняйтесь связать это здесь. - person JJD; 24.07.2013

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

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

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

person rodrigoalvesvieira    schedule 25.07.2011

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

Функции:

  1. Проверка
  2. Easy/Add удалить поля
  3. Простая конфигурация
person Aboozar Rajabi    schedule 09.03.2016