GilcierWeb

Desenvolvedor Web e Freelancer - Os Melhores Links

Fortaleza Ceará Brasil

[email protected]

@GilcierWeb

  • Home
  • O GilcierWeb
  • Serviços
  • Notícias
  • Artigos
  • Vídeos
  • Parceiros
  • Orçamento
  • Contato
Formulário de contato sem banco de dados e envio de email em Ruby on Rails

Formulário de contato sem banco de dados e envio de email em Ruby on Rails

Criação de uma simples app com formulário de contato sem banco de dados e envio de email em Ruby on Rails

Vamos criar uma simples aplicação que vou chamar de contato ou o nome que preferir.

rails new contato -d mysql

Entramos na pasta da aplicação gerada pelo Rails 4+.

cd contato/

Dentro da pasta vamos nos tornar sudo pra quem usa Linux ou Mac.

sudo su

Agora vamos criar o controler Home com apenas duas actions index e contato.

rails generate controller home index contato

Criaremos um model Contato sem migration só com a finalidade de validação.

rails generate model Contato --migration=false

Abrimos o model Contato e vamos fazer as alterações abaixo.

#app/models/contato.rb
class Contato 
  include ActiveModel::Model 

  attr_accessor :nome, :email, :cidade, :estado, :telefone, :assunto, :mensagem 

  validates_presence_of :nome, :email, :cidade, :estado, :telefone, :assunto, :mensagem 
  validates_format_of :email, :with => /\A[^@][email protected]([^@\.]+\.)+[^@\.]+\z/ 
end

Em versões anteriores do Rails para usar o ActiveModel você tinha que fazer algo como isso para o mesmo resultado.

class Contato 

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

  attr_accessor :nome, :email, :cidade, :estado, :telefone, :assunto, :mensagem 

  validates_presence_of :nome, :email, :cidade, :estado, :telefone, :assunto, :mensagem 
  validates_format_of :email, :with => /\A[^@][email protected]([^@\.]+\.)+[^@\.]+\z/ 

  def persisted? 
    false 
  end 
end

Vamos editar a view contato.

# app/views/home/contato.html.erb
<h1>Home#contato</h1> 
<p>Find me in app/views/home/contato.html.erb</p> 
<div class="row"> 
  <div class="formulario col-md-6"> 
    <h3><%= t('.titulo') %></h3> 
    <p><%= t('.descricao') %>.</p> 
    <div class="formulario_container"> 

      <%= form_for(@contato, url: {action: "send_contato"}) do |f| %> 

      <% if @contato.errors.any? %> 
      <div id="error_explanation"> 
        <h2><%= pluralize(@contato.errors.count, "error") %> <%= t 'general.form_error' %></h2> 

        <ul> 
          <% @contato.errors.full_messages.each do |message| %> 
          <li><%= message %></li> 
          <% end %> 
        </ul> 
      </div> 
      <% end %> 

      <fieldset> 
        <div class="form-group"> 
        <%= f.label :nome, t('.form.nome'), class: "form_label" %><br /> 
         <%= f.text_field :nome, class: "form-control" %>           
       </div> 
       <div class="form-group"> 
         <%= f.label :email, t('.form.email'), class: "form_label" %><br /> 
         <%= f.text_field :email, class: "form-control" %>     
       </div> 
       <div class="row"> 
        <div class="col-md-9"> 
         <%= f.label :cidade, t('.form.cidade'), class: "form_label" %><br /> 
         <%= f.text_field :cidade, class: "form-control" %>     
       </div> 
       <div class="col-md-3">                  
        <%= f.label :estado, t('.form.estado'), class: "form_label" %><br /> 
        <% estados = [['Escolha', ''],['AC', 'AC'], ['AL', 'AL'], ['AM', 'AM'], ['AP', 'AP'], ['BA', 'BA'], ['CE', 'CE'], ['DF', 'DF'], ['ES', 'ES'], ['GO', 'GO'], ['MA', 'MA'], ['MG', 'MG'], ['MS', 'MS'], ['MT', 'MT'], ['PA', 'PA'], ['PB', 'PB'], ['PE', 'PE'], ['PI', 'PI'], ['PR', 'PR'], ['RJ', 'RJ'], ['RN', 'RN'], ['RO', 'RO'], ['RR', 'RR'], ['RS', 'RS'], ['SC', 'SC'],  ['SE', 'SE'],['SP', 'SP'], ['TO', 'TO']]%> 

        <%= f.select(:estado, estados, {}, {class: "form-control"}) %> 
      </div> 
    </div> 
    <br /> 
    <div class="form-group"> 
      <%= f.label :telefone, t('.form.telefone'), class: "form_label" %><br /> 
      <%= f.text_field :telefone, class: "form-control" %>   
    </div> 
    <div class="form-group"> 
     <%= f.label :assunto, t('.form.assunto'), class: "form_label" %><br /> 
     <%= f.text_field :assunto, class: "form-control" %>   
   </div> 
   <div class="form-group"> 
    <%= f.label :mensagem, t('.form.mensagem'), class: "form_label" %><br />    
    <%= f.text_area :mensagem,  cols: 31, rows: 5, class: "form-control" %>        
  </div> 
  <div class="form-group">       
    <%= f.submit t('.form.submit'), class: "btn btn-primary"%> 
    <%= f.submit t('.form.reset'), :type => "reset" , class: "btn btn-default"%>       
  </div> 
</fieldset> 
<% end %> 
</div> 
</div> 

<div class="col-md-6"> 
  <div class="info_contato"> 
    <h3>Informações de Contatos</h3> 
    <br /> 
    <p><strong>Localização</strong>: Fortaleza Ceará Brasil</p> 
    <p><strong>Telefones</strong>: +55 85 0000 0000<br /> 
      +55 85 0000 0000  </p> 
      <p><strong>Email</strong>: <a href="mailto:[email protected]">[email protected]</a><br /> 
        <strong>Website</strong>: <a href="http://www.gilcierweb.com.br">http://www.gilcierweb.com.br</a></p> 
        <hr /> 
      </div> 
    </div> 
  </div>

Agora iremos criar um mailer que vai ficar responsável pelo envio do e-mails.

rails generate mailer ContatoMailer 

Vamos abrir e editar o arquivo mailer gerado pelo rails.

#app/mailers/contato_mailer.rb 
class ContatoMailer < ActionMailer::Base 
 # default from: "[email protected]" 
  default to: "[email protected]" 

  def new_message(message) 
    @contato = message 

    mail(from: @contato.email, subject: "Mensagem de contato CMS-Rails - GilcierWeb") do |format| 
      format.html { render 'contato_email' } 
      format.text { render 'contato_email' } 
    end 
  end 
end

Criaremos outra action no controller Home chamada send_contato.

#app/controller/home_controller.rb
 def send_contato
 end

No controller Home editamos as action contato e send_contato para que fiquem assim.

#app/controller/home_controller.rb
def contato 
    @contato = Contato.new 
  end 

  # POST /send_contatos 
  def send_contato 
    @contato = Contato.new(contato_params) 

     if @contato.valid? 
      ContatoMailer.new_message(@contato).deliver 
      redirect_to(contato_path, notice: 'Mensagem enviada com sucesso!'  ) 
    else 
      flash[:error] = 'Erro ao enviar email'
      render :contato 
    end 
end

Ainda no home criaremos mais uma função seguindo o Strong Parameters do rails 4+

private 
 def contato_params 
    params.require(:contato).permit(:nome, :email, :cidade, :estado, :telefone, :assunto, :mensagem) 
 end

Finalizamos com o controller home agora iremos editar o arquivo rotas do rails.

#/config/routes.rb
Rails.application.routes.draw do 
 #Rotas para frontend 
  get '/', to: 'home#index' 
  get 'contato', to: 'home#contato' 
  post 'send_contato', to: 'home#send_contato' 
 # You can have the root of your site routed with "root" 
  root 'home#index' 
end 

Criamos as rotas que iremos usar agora temos que editar o arquivo de template do e-mail.

#/app/views/contato_mailer/contato_email.html.erb
<!DOCTYPE html> 
<html> 
    <head> 
        <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' /> 
    </head> 
    <body> 
        <h1>Mensagem de contato CMS-Rails - GilcierWeb - <%= @contato.nome %></h1> 
        <hr /> 
        <p>Nome: <%= @contato.nome %><br /> 
        Email: <%= @contato.email %><br /> 
        Cidade: <%= @contato.cidade %><br /> 
        Estado: <%= @contato.estado %><br /> 
        Telefone: <%= @contato.telefone %><br /> 
        Assunto: <%= @contato.assunto %><br /> 
        Mensagem: <%= @contato.mensagem %><br /> 
        </p> 
        <footer class="text-center"> 
            <hr /> 
            <p> 
            Copyright &copy; GilcierWeb Rails - <%= Time.new.year %> - <a href="http://gilcierweb.com.br" target="_blank">gilcierweb.com.br</a> 
            <p> 
        </footer> 
    </body> 
</html>

E criaremos o template somente texto.

#/app/views/contato_mailer/contato_email.text.erb
Mensagem de contato CMS-Rails - GilcierWeb - <%[email protected] %>
     
Nome: <%= @contato.nome %>
Email: <%= @contato.email %>
Cidade: <%= @contato.cidade %>
Estado: <%= @contato.estado %>
Telefone: <%= @contato.telefone %>
Aassunto': <%= @contato.assunto %>
Mensagem: <%= @contato.mensagem %>
      
Copyright © GilcierWeb Rails - <%= Time.new.year %> - http://gilcierweb.com.br

Finalizamos o formulário de contato com envio de e-mail agora é só testar espero ter ajudado alguém, para ver em uso acesse https://cmsrails.herokuapp.com/ e o Github pesquise sobre o assunto citado nesse humilde tutorial.

Links referências:

http://www.rubyonrails.com.br/

http://guides.rubyonrails.org/

http://guides.rubyonrails.org/action_mailer_basics.html

http://guides.rubyonrails.org/layouts_and_rendering.html

http://guides.rubyonrails.org/routing.html

http://tryruby.org/

http://www.caelum.com.br/apostila-ruby-on-rails/

http://vimeo.com/guateonrails/videos

https://www.youtube.com/channel/UCsXm26tIJAmh3MfaZi9Vr7g/videos


Últimos artigos

  • Dockerizando uma aplicação ruby on rails com postgresql, redis e vue.js
    Dockerizando uma aplicação ruby on rails com postgresql, redis e vue.js
    Leia Mais
  • Formulário de contato com Python, Flask e envio de e-mail
    Formulário de contato com Python, Flask e envio de e-mail
    Leia Mais
  • Como publicar seu site grátis no Heroku
    Como publicar seu site grátis no Heroku
    Leia Mais
  • Criando um componente reusável com Vue.js
    Criando um componente reusável com Vue.js
    Leia Mais

Últimas notícias

  • Facebook lança versão de MySQL para bancos de dados gigantes
    Facebook lança versão de MySQL para bancos de dados gigantes
    Leia Mais
  • BID lança rede social para pequenas e médias empresas
    BID lança rede social para pequenas e médias empresas
    Leia Mais

Livros e Apostilas

  • Fundamentos de jQuery (jQuery Fundamentals)
  • Apostilando.com
  • LibrosWeb
  • Python para Desenvolvedores

Links

  • Blender 3D
  • Editor de Vídeo Gratuito Lightworks
  • Compactador Gratuito IZArc
  • Editor de imagens Gimp
  • Desenho vetorial com Inkscape
  • Realtime xRTML
  • Codecademy - Aprenda á programar
  • Commerce 10 - Plataforma E-commerce
  • Universojob - Encontre seu Job
  • AkitaOnRails
  • One Bit Code

Diversos

  • Senado Federal
  • Câmara dos Deputados
  • Portal da Transparência
  • Khan Academy - Aprenda Matemática
  • App colab.re
  • deepin Linux OS
  • Calcular Porcentagem

Mapa do site

  • Home
  • O GilcierWeb
  • Serviços
  • Notícias
  • Artigos
  • Vídeos
  • Parceiros
  • Orçamento
  • Contato

Redes Sociais

  • Facebook
  • Twitter
  • Linkedin
  • YouTube
  • Github

[email protected]

@GilcierWeb

Twitter

Tweets de @GilcierWeb

Contatos

* Please note - we do not spam your email.

Copyright © 2021 - All Rights Reserved - gilcierweb.com.br - Desenvolvido por: GilcierWeb - Site criado com o Framework Ruby on Rails

Site melhor visualizado com navegadores modernos como: Firefox, Opera, Chorme, Apple Safari