2010-09-15 18 views
11

Ich möchte einfach ein Kontaktformular mit Namen, E-Mail und Nachrichtenfelder in meiner Rails App, ich möchte nicht (permanent) die Nachricht speichern möchte ich nur die Nachricht als E-Mail senden für einen E-Mail-Account von mir. Kannst du mir helfen?Kontaktformular in Rails 3

Danke!

# /app/models/contact_us.rb 
class ContactUs 

    include ActiveModel::Validations 
    include ActiveModel::Conversion 
    extend ActiveModel::Naming 

    attr_accessor :name, :email, :message 

    def initialize(attributes = {}) 
    attributes.each do |name, value| 
     send("#{name}=", value) 
    end 
    end 

    def persisted? 
    false 
    end 
end 

dann ein Mailer:

# /app/mailer/contact_us_mailer.rb 
class ContactUsMailer < ActionMailer::Base 

    default :to => "[email protected]" 

    def send(message) 
    @message = message 
    mail(:subject => @message.subject, :from => @message.email) do |format| 
     format.text 
    end 
    end 
end 

und eine Ansicht:

# /app/views/contact_us_mailer/sent.text.erb 
Message sent by <%= @message.name %> 
<%= @message.message %> 

Ich habe nicht testen diesen Code

Antwort

3

Ich habe eine Arbeitsform und darüber gebloggt .. der Text auf Portugiesisch, aber der Code selbst ist (meist) in Englisch http://www.rodrigoalvesvieira.com/formulario-contato-rails/

Dank!

+0

Unterbrochene Verbindung. Umleitungen zu einer Seite zeigen auch eine Zeichnung eines Phallus, die nicht die Definition von SFW (Safe For Work) ist, wo jemand höchstwahrscheinlich nach einem Kontaktformular für Schienen suchen würde. Obrigado. –

15

In Rails3, können Sie ein ActiveModel Modell erstellen genau, aber ich will nur, dass du die Idee bekommst ...

+3

Warum ist das der beste Weg? Warum zuerst ein Modell dafür erstellen? Warum nicht einfach das contact_us-Formular an eine contact_us-Aktion auf dem Controller senden, die dann den Mailer auslöst? – AdamT

+0

Dies ist ein gutes Beispiel, verwenden Sie nicht einfach "Senden" als Methodenname, da es ein reserviertes Schlüsselwort ist. Der Grund für ein Modell besteht darin, Validierungen hinzuzufügen, sodass Sie das Modell mit gültigen Werten überprüfen möchten. in deinem Controller. –

7

Ich habe eine Rails Engine geschrieben, die Sie problemlos in jede Rails 3+ Anwendung einfügen können. Ich habe dem Formular kein Feld "Name" hinzugefügt, aber Sie können das Repo verzweigen und dann an Ihre Bedürfnisse anpassen. Es erfordert das Formtastic-Juwel, da ich eine einfache Möglichkeit suchte, in die vorhandenen Stile der Völker zu haken.

Bündel
gem 'contact_us', '~> 0.4.0' 

Run und der Rake Aufgabe installieren:

der Motor fügen Sie den contact_us Juwel zu Ihrem Gemfile installieren

$ bundle 
$ bundle exec rake contact_us:install 

Ändern Sie dann nur die erzeugte initializer in/config/initializers/contact_us.rb, um die E-Mail zu erhalten, an die die Formulareinreichungen gesendet werden sollen.

+0

Wow Mann, sehr nett! – rodrigoalves

+0

@jDutil müssen wir SMTP-Einstellungen in den evironment-Konfigurationsdateien hinzufügen? – mrudult

+0

Sie müssen Ihren ActionMailer so einrichten, dass er Ihre E-Mails übermittelt, unabhängig davon, wie die E-Mails gesendet werden sollen. Das contact_us-Juwel stellt einfach das Formular und den Mailer zur Verfügung, der Ihnen zur Verfügung steht, um Ihre Anwendungsmethode zum Senden von Mail zu konfigurieren. – JDutil