2010-09-11 3 views
31

Voglio fare un modulo di contatto in Rails 3 con i seguenti campi:Contattaci funzionalità in Rails 3

  • Nome
  • Email
  • titolo del messaggio
  • Corpo del messaggio

I messaggi postati sono destinati ad andare al mio indirizzo e-mail quindi non devo necessariamente memorizzare i messaggi nel database. Devo usare ActionMailer, qualsiasi gemma o plugin per questo?

+1

Potreste essere interessati a conoscere le forme di contatto riposante come pure: http: // robot. thoughtbot.com/post/159807170/restful-contact-forms – sivabudh

+0

Oh grazie, è stato utile :) – rodrigoalves

risposta

66

This tutorial è un esempio eccellente - ed è Rails 3

Aggiornamento:

This article è un esempio migliore di quello che ho postato in precedenza, funziona perfettamente

secondo aggiornamento:

Vorrei anche raccomandare di unire alcune delle tecniche descritte in this railscast sulla gemma active_attr, dove Ryan Bates ti guida nel processo di creazione di un modello senza tab per una pagina di contatto.

terzo aggiornamento:

ho scritto la mia test-driven blog post su di esso

+1

Non è aggiornato e utilizza un modello di supporto non necessario. Sebbene abbia ancora +1 come migliorato la mia comprensione :) –

+0

Abe concordato, ho aggiunto alcuni nuovi collegamenti, ecc. – stephenmurdoch

+0

Ti capita di sapere come i18n-izzare gli attr_accessor delineati nel modello dell'articolo a cui ti sei collegato? Ho definito quanto segue in .yml, ma non viene preso in considerazione nel messaggio di errore corrispondente. 'de.activerecord.attributes.message.subject: Betreff' – user569825

1

non ho potuto rendere il codice di questo esempio lavoro e penso che rende le cose un po 'complessa poiché la vostra creazione di un modello.

Anywat, ho fatto un modulo di contatto di lavoro e bloggato su di esso .. il testo è in portoghese, ma il codice stesso è (soprattutto) in inglese http://www.rodrigoalvesvieira.com/formulario-contato-rails/

Nota: Ho usato sendmail, non SMTP.

9

Ho aggiornato l'implementazione per essere il più vicino possibile alle specifiche REST.

Configurazione di base

È possibile utilizzare il mail_form gem. Dopo l'installazione, è sufficiente creare un modello denominato Message simile a quello descritto nella documentazione.

# 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 

Questo sarà già permetterà di testare sending emails via the console.

pagina Contatti

Al fine di creare una pagina di contatto separato eseguire le seguenti operazioni.

# 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 

Setup l'instradamento ..

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

Preparare una forma parziale ..

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

e rendere il modulo in una vista ..

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

Provo questo, ma, dove metti la tua configurazione SMTP. E questi moduli di contatto possono funzionare nell'ambiente localhost? – Stanmx

+0

@Stanmx La configurazione SMTP va in 'config/environment/development.rb' o' ../ production.rb'. La [documentazione descrive una configurazione per GMail] (http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration-for-gmail) che funziona anche quando è in esecuzione su localhost. – JJD

+0

Grazie @JJD, inizio con un altro esempio, ma io ogni invio, ho ricevuto: argomento errato (Fixnum)! (Tipo previsto di OpenSSL :: SSL :: SSLContext) – Stanmx

-1

È possibile utilizzare Contattaci gioiello tramite questo link: https://github.com/JDutil/contact_us La documentazione è chiara e si può utilizzare semplicemente.

Caratteristiche:

  1. convalida
  2. Easy/Aggiungere Rimuovere campi
  3. configurazione semplice