読者です 読者をやめる 読者になる 読者になる

人生のヒント

私が経験したことが、誰かの人生のヒントになればと願い書きます。

Ruby On Railsでお問合せメールフォームを作る

RubyOnRails お問合せメールフォーム
スポンサーリンク

f:id:hinthint:20160901164238j:plain



以前、このブログでRuby On Railsでメール送信できるように設定しました。
今回は、この設定を活かしてお問合せメールフォームを作りたいと思います。

life.hint.jp.net



以下サイトを参考にしました。
ttps://www.imd-net.com/column/1731/


いつも通り、サーバにrootでログインしてから作業します。

1. Routes設定

# su - rails
$ cd work/foo
$ vi config/routes.rb

config/routes.rbファイル内のRails.application.routes.draw do~end間に下記を記入します。

  get 'contact' => 'contact#index'
  post 'contact/confirm' => 'contact#confirm'
  post 'contact/thanks' => 'contact#thanks'

 2.コントローラ

$ rails g controller contact index
$ vi app/controllers/contact_controller.rb

app/controllers/contact_controller.rbファイルを以下のように作ります。

class ContactController < ApplicationController
  def index
    @contact = Contact.new
    render :action => 'index'
  end
  
  def confirm
    @contact = Contact.new(params[:contact])
    if @contact.valid?
      render :action => 'confirm'
    else
      render :action => 'index'
    end
  end
     
  def thanks
    @contact = Contact.new(params[:contact])
    ContactMailer.received_email(@contact).deliver
  
    render :action => 'thanks'
  end
end

 

3.ビュー

$ vi app/views/contact/index.html.erb

 
app/views/contact/index.html.erbファイルを以下の内容で作ります。

<%= form_for @contact, :url => contact_confirm_path do |f| %>    
  <% if @contact.errors.any? %>
      <strong>入力内容にエラーがあります</strong>
      <ul>
        <% @contact.errors.each do |attr, msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
  <% end %>
     
  <table>
    <tr>
      <th>名前(必須)</th>
      <td><%= f.text_field :name %></td>
    </tr>
    <tr>
      <th>メールアドレス(必須)</th>
      <td><%= f.text_field :email %></td>
    </tr>
    <tr>
      <th>お問い合わせ内容</th>
      <td><%= f.text_area :message %></td>
    </tr>
  </table>
  <%= f.submit '確認' %>
<% end %>

 

$ vi app/views/contact/confirm.html.erb

app/views/contact/confirm.html.erbファイルを以下の内容で作ります。
    

<%= form_for @contact, :url => contact_thanks_path do |f| %>
  <table>
    <tr>
      <th>名前</th>
      <td>
        <%= f.hidden_field :name %>
        <%= @contact.name %>
      </td>
    </tr>
    <tr>
      <th>メールアドレス</th>
      <td>
        <%= f.hidden_field :email %>
        <%= @contact.email %>
      </td>
    </tr>
    <tr>
      <th>お問い合わせ内容</th>
      <td>
        <%= f.hidden_field :message %>
        <%= simple_format(@contact.message) %>
      </td>
    </tr>
  </table>
 <%= f.submit '送信' %>
<% end %>

 

$ vi app/views/contact/thanks.html.erb

app/views/contact/thanks.html.erbファイルを以下の内容で作ります。

お問い合わせいただきありがとうございました。

 

 $ mkdir app/views/contact_mailer/
 $ vi app/views/contact_mailer/received_email.text.erb


app/views/contact_mailer/received_email.text.erbファイルを以下の内容で作ります。

Webサイトからお問い合わせがありました。

--------------------------
名前: <%= @contact.name %>
メールアドレス: <%= @contact.email %>
お問い合わせ内容:<%= @contact.message %>
--------------------------

 

4.モデル

$ rails g model contact

$ vi app/models/contact.rb

  app/models/contact.rbファイルを以下の内容で作成します。

class Contact
  include ActiveModel::Model

  attr_accessor :name, :email, :message

  validates :name, :presence => {:message => '名前を入力してください'}
  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  validates :email, format: { with: VALID_EMAIL_REGEX ,:message => 'メールアドレスを入力してください'}
end

 

5.メーラー

$ vi app/mailers/contact_mailer.rb

 app/mailers/contact_mailer.rbファイルを以下の内容で作成します。

class ContactMailer < ActionMailer::Base
  default from: "送信元アドレス"
  default to: "送信先アドレス"
     
  def received_email(contact)
    @contact = contact
    mail(:subject => 'お問い合わせを承りました')
  end
     
end

 

 $ /etc/init.d/unicorn restart

 

6.動作確認

 Webブラウザで「http://FQDN//contact」へアクセスします。
フォームに適切な文字列を入力して問い合わせします。
「送信先アドレス」に問い合わせ内容のメールが届いていれば、OKです。