Contact us functionality in Rails 3

前端 未结 4 1512
不知归路
不知归路 2020-12-12 18:29

I want to make a contact us form in Rails 3 with the following fields:

  • Name
  • Email
  • Message title
  • Message body

The post

相关标签:
4条回答
  • 2020-12-12 18:41

    This tutorial is an excellent example - and it's Rails 3

    Update:

    This article is a better example than the one I posted earlier, works flawlessly

    Second Update:

    I would also recommend merging-in some of the techniques outlined in this railscast on the active_attr gem, where Ryan Bates walks you through the process of setting up a tabless model for a contact page.

    Third Update:

    I wrote my own test-driven blog post about it

    0 讨论(0)
  • 2020-12-12 18:49

    I updated the implementation to be as close as possible to the REST specification.

    Basic setup

    You can use the mail_form gem. After installing simply create a model named Message similar as it is described in the documentation.

    # 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
    

    This will already allow you to test sending emails via the console.

    Contact page

    In order to create a separate contact page do the following.

    # 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 the routing ..

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

    Prepare a form partial ..

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

    And render the form in a view ..

    // app/views/messages/index.html.haml
    #contactform.row
      = render 'form'
    
    0 讨论(0)
  • 2020-12-12 18:59

    You can use Contact Us gem via this link: https://github.com/JDutil/contact_us The documentation is clear and you can use it simply.

    Features:

    1. Validation
    2. Easy/Add remove fields
    3. Simple configuration
    0 讨论(0)
  • 2020-12-12 19:06

    I couldn't make the code of this example work and I think it makes things a bit complex since your creating a model.

    Anywat, I made a working contact form and blogged about it.. the text is in portuguese but the code itself is (mostly) in english http://www.rodrigoalvesvieira.com/formulario-contato-rails/

    Note: I used sendmail, not SMTP.

    0 讨论(0)
提交回复
热议问题