Railsにてお問い合わせフォームを作成する

こんにちは。今回は、
お問い合わせフォームを作ったので備忘録的な意味もあって書いてみています。

お困りの方いたら参考です。

##参考
[Ruby on Rails 4 でお問い合わせフォーム（確認画面つき）を作成する](https://www.imd-net.com/column/1731/)

参考にさせていただきました！
ただ僕よりも初心者の方だったらもしかしたら詰まってしまうところがあると思うのでもう少し細かく書いてみます。
この通りやれば実装できます。

##Routesを設定する
順番はまあまだどれでもいいと思いますが先にルートを設定していきましょう。

```ruby:routes.rb
Rails.application.routes.draw do
  get  'inquiry' => 'inquiry#index'              # 入力画面
  post 'inquiry/confirm' => 'inquiry#confirm'   # 確認画面
  post 'inquiry/thanks' => 'inquiry#thanks'     # 送信完了画面
end
```
## コントローラを設定する
次にコントローラを設定しましょう。inquiryを作っていきます。
まずコンソールに下記を打ち込む。

```ruby:console
$ rails g controller inquiry
```

そしたらコントローラができるのでそれを編集する。

```ruby:/app/controllers/inquiry_controller.rb
class InquiryController < ApplicationController
  def index
    @inquiry = Inquiry.new
    render :action => 'index'
  end

  def confirm
    @inquiry = Inquiry.new(inquiry_params)
    if @inquiry.valid?
      render :action => 'confirm'
    else
      render :action => 'index'
    end
  end

  def thanks
    @inquiry = Inquiry.new(inquiry_params)
    InquiryMailer.received_email(@inquiry).deliver
    render :action => 'thanks'
  end
  
  private
  def inquiry_params
    params.require(:inquiry).permit(:name, :email, :message)
  end
end

```

細かいことは抜きにして、
indexで入力画面を作って、confirmで確認画面を作る。んでthanksで送信完了画面を作るというような流れで。

## View(ビュー)を作る
先ほど伝えたように、入力画面／確認画面／送信完了画面　を作っていきます。


```ruby:/app/views/inquiry/index.html.erb
<%= form_for @inquiry, :url => inquiry_confirm_path do |f| %>
  <div class="page-header">
    <h1>お問い合わせ</h1>
  </div>
 
  <% if @inquiry.errors.any? %>
    <div class="alert alert-danger" role="alert">
      <strong>入力内容にエラーがあります</strong>
      <ul>
        <% @inquiry.errors.each do |attr, msg| %>
          <li><%= msg %></li>
        <% end %>
      </ul>
    </div>
  <% end %>
 
  <table class="table">
    <tr>
      <th>名前<span class="text-danger">（必須）</span></th>
      <td><%= f.text_field :name %></td>
    </tr>
    <tr>
      <th>メールアドレス<span class="text-danger">（必須）</span></th>
      <td><%= f.text_field :email %></td>
    </tr>
    <tr>
      <th>お問い合わせ内容</th>
      <td><%= f.text_area :message %></td>
    </tr>
  </table>
  <%= f.submit '確認', class: 'btn btn-primary' %>
<% end %>
```
```ruby:/app/views/inquiry/confirm.html.erb
<div class="page-header">
  <h1>お問い合わせ</h1>
</div>
 
<%= form_for @inquiry, :url => inquiry_thanks_path do |f| %>
  <table class="table">
    <tr>
      <th>名前</th>
      <td>
        <%= f.hidden_field :name %>
        <%= @inquiry.name %>
      </td>
    </tr>
    <tr>
      <th>メールアドレス</th>
      <td>
        <%= f.hidden_field :email %>
        <%= @inquiry.email %>
      </td>
    </tr>
    <tr>
      <th>お問い合わせ内容</th>
      <td>
        <%= f.hidden_field :message %>
        <%= simple_format(@inquiry.message) %>
      </td>
    </tr>
  </table>
  <%= f.submit '送信', :class => 'btn btn-primary' %>
<% end %>
```
```ruby:/app/views/inquiry/thanks.html.erb
<div class="page-header">
  <h1>お問い合わせ</h1>
</div>
<p>
  お問い合わせいただきありがとうございました。
</p>
```

## Model（モデル）を作る
問い合わせフォームの入力情報を持ちまわるモデルクラスを作成します。

```ruby:/app/models/inquiry.rb
class Inquiry
  include ActiveModel::Model
 
  attr_accessor :name, :email, :message
 
  validates :name, :presence => {:message => '名前を入力してください'}
  validates :email, :presence => {:message => 'メールアドレスを入力してください'}
end
```
今回はDBに情報を入れたりしないので、
rails g modelは実行しないで、直接modelsからinquiry.rbを直接ファイル作成してます。

モデルを作っても大丈夫だと思うので、
作りたい人はご自由に・・・

## Mailer(メーラー)
送信メールのインスタンス生成用のメーラークラスを作成します。
入力された内容を管理者のアドレスに送りたいので設定します。

```ruby:/app/mailers/inquiry_mailer.rb
class InquiryMailer < ActionMailer::Base
  default from: "example@example.com"   # 送信元アドレス
  default to: "example@example.com"     # 送信先アドレス
 
  def received_email(inquiry)
    @inquiry = inquiry
    mail(:subject => 'お問い合わせを承りました')
  end
end
```

送信先のやつ（default to: "example@example.com"）を受信したいアドレスに変える。これ重要。


```ruby:/app/views/inquiry_mailer/received_email.text.erb
Webサイトからお問い合わせがありました。
 
--------------------------
Name: <%= @inquiry.name %>
Email: <%= @inquiry.email %>
Message:
<%= @inquiry.message %>
--------------------------
```

ちょっと文字とか変えるとメール内容が変わるのでいじってみてね。

ちなみに上記の、
「inquiry_mailer.rb」「received_email.text.erb」は/app/views/inquiry_mailerで右クリックで新規ファイルを作成してくださいね。

これで多分うまくいきます！！
cssとかに関しては今回ノータッチなので別で学んでみてくださいね！


今回9割パクらせていただきました！感謝です！
僕みたいに知識の低い方はいろんな人の投稿があるからなんとか踏ん張れてます！ありがとうございます！！