2010-09-11 27 views
31

Quiero hacer un formulario de contacto en Rails 3 con los siguientes campos:Contacto funcionalidad en Rails 3

  • Nombre
  • correo electrónico
  • título del mensaje
  • Cuerpo del mensaje

Los mensajes publicados están destinados a ir a mi dirección de correo electrónico, por lo que no necesariamente debe almacenar los mensajes en la base de datos. ¿Tengo que usar ActionMailer, cualquier gema o complemento para ello?

+1

Usted podría estar interesado en leer acerca de las formas de contacto descanso reparador, así: http: // robots. thoughtbot.com/post/159807170/restful-contact-forms – sivabudh

+0

Gracias, fue útil :) – rodrigoalves

Respuesta

66

This tutorial es un excelente ejemplo - y es Rails 3

Actualización:

This article es un ejemplo mejor que el que he publicado anteriormente, funciona a la perfección

Segundo informe de actualización:

También recomendaría fusionar-en algunas de las técnicas descritas en this railscast en la gema active_attr, donde Ryan Bates lo guiará a través del proceso de configuración de un modelo de tabla para una página de contacto.

tercer informe de actualización:

me escribió mi propia test-driven blog post al respecto

+1

Esto no está actualizado y usa un modelo de soporte innecesario. Aunque todavía +1, ya que mejoró mi comprensión :) –

+0

Abe acordada, agregué algunos enlaces nuevos, etc. – stephenmurdoch

+0

¿Sabes por casualidad cómo identificar los attr_accessors descritos en el modelo del artículo al que vinculaste? Definí lo siguiente en .yml, pero no se tiene en cuenta en el mensaje de error correspondiente. 'de.activerecord.attributes.message.subject: Betreff' – user569825

1

no pude hacer que el código de este ejemplo de trabajo y creo que hace las cosas un poco compleja ya que su creación de un modelo.

Anywat, hice un formulario de contacto de trabajo y escribió en su blog sobre esto .. el texto está en portugués, pero el propio código es (en su mayoría) en Inglés http://www.rodrigoalvesvieira.com/formulario-contato-rails/

Nota: He utilizado Sendmail, no SMTP.

9

Actualicé la implementación para que esté lo más cerca posible de la especificación REST.

Configuración básica

Puede utilizar el mail_form gem. Después de la instalación, simplemente cree un modelo llamado Message similar como se describe en la documentación.

# 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 

Esto ya le permitirá poner a prueba sending emails via the console.

página Contactar

el fin de crear una página de contacto separada hacer lo siguiente.

# 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 

Configuración del enrutamiento ..

# config/routes.rb 
MyApp::Application.routes.draw do 
    # Other resources 
    resources :messages, only: [:index, :create] 
    match "contact" => "messages#index" 
end 

preparar una forma parcial ..

// 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' 

Y devuelve el formulario en una vista ..

// app/views/messages/index.html.haml 
#contactform.row 
    = render 'form' 
+0

Intento esto, pero, donde pones tu configuración de SMTP. ¿Y estos formularios de contacto pueden funcionar en el entorno localhost? – Stanmx

+0

@Stanmx La configuración de SMTP entra en 'config/environment/development.rb' o' ../ production.rb'. La [documentación describe una configuración para GMail] (http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail) que también funciona cuando se ejecuta en localhost. – JJD

+0

Gracias @JJD, comienzo con otro ejemplo, pero cada vez que envío, recibí: ¡argumento incorrecto (Fixnum)! (Tipo esperado de OpenSSL :: SSL :: SSLContext) – Stanmx

-1

Puede uso contacto joya a través de este enlace: https://github.com/JDutil/contact_us La documentación es clara y se puede usar simplemente.

Características:

  1. Validación
  2. Fácil/Agregar o quitar campos
  3. configuración simple