【コピペ】Railsで診断機能を実装する方法

今回はRuby on Railsで診断機能を実装します。
目次は以下の通りです。

###1.コントローラー設計
###2.データベース周り
###3.Viewページ周り
###4.ルート周り

##1.コントローラー設計

```ruby:perfumes_controller.rb
class PerfumesController < ApplicationController
  def index
  end

  def new
    @perfume = Perfume.new
  end

  def show
    @perfume = Perfume.find_by(id: params[:id])
  end

  def create
    @perfume = Perfume.new(perfume_params)
    params[:perfume][:question] ? @perfume.question = params[:perfume][:question].join("") : false
    if @perfume.save
        flash[:notice] = "診断が完了しました"
        redirect_to perfume_path(@perfume.id)
    else
        redirect_to :action => "new"
    end
  end

private
  def perfume_params
      params.require(:perfume).permit(:id, question: [])
  end
end

```

##2.データベース周り

```ruby:ターミナル/コマンドプロンプト
$ rails g model Perfume question:string
```

```ruby:ターミナル/コマンドプロンプト
$ rails db:migrate
```

##3.Viewページ周り

```ruby:perfumes/index.html.erb
<!DOCTYPE html> <!--　この文章がHTML文章であることを伝える要素です。-->
<html lang="ja"><!--言語の指定-->
    <head><!--ページに表示されない情報(サイトの裏側の設定)-->
        <meta charset="utf-8">
        <title>香水診断スタート</title><!--ブラウザのタブのタイトルを指定-->
    </head>

    <body>
        <header>
            <h1 class="headline">
            <a>Perfu_me</a>
            </h1>
            <ul class="nav-list">
                <li class="nav-list-item">about fragrance</li>
                <li class="nav-list-item"><%= link_to "診断", perfumes_path, class: "link" %></li>
            </ul>
        </header>

        <div class="start">
            <h6>Are you ready?</h6>
            <%= link_to "診断を始める", new_perfume_path, class: "link" %>
        </div>
    </body>
```

```ruby:perfumes/new.html.erb
<%= form_for(@perfume, class: 'form-horizontal', role: 'form') do |f| %>
            <div class="container-sindan">
                <div class="row">
                    <div class="col-12">
                        <p>Question1. どちらかと言うと…</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "1", nil %>じっくり考える方だ</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "2", nil %>考えるより行動する方だ</p>
                    </div>

                    <div class="col-12">
                        <p>Question2. 自分の価値観として近い方は…</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "1", nil %>周りの人と違う存在でありたい</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "2", nil %>周りと同じでいたい</p>
                    </div>

                    <div class="col-12">
                        <p>Question3. 人と接するときは…</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "1", nil %>相手の話をよく聞く方だ</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "2", nil %>自分の話をよくする方だ</p>
                    </div>

                    <div class="col-12">
                        <p>Question4. 大切にしたいのは…</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "1", nil %>論理性だ</p>
                    </div>
                    <div class="col-6">
                        <p><%= f.check_box :question, {multiple: true}, "2", nil %>情緒だ</p>
                    </div>
                </div>
            </div>
            <div class="sindanbotan">
                <%= f.submit "post" %>
            </div>
<% end %>
```

```ruby:perfumes/show.html.erb
        <div class="intoro">
            <h5>診断結果</h5>
            <p>あなたにおすすめの香りは…</p>
        </div>
        <div class="tweet-container">
            <div class="tweet">
                <% if @perfume.question == "1111" %>
                <h6>レモン</h6>
                <p>柑橘系の代表的な原料</p>
                <p>清涼感があり、爽やかな印象</p>

                <% elsif @perfume.question == "1112" %>
                <h6>シトラス</h6>
                <p>オレンジに似た柑橘系の果物</p>
                <p>リラックス効果がある</p>

                <% elsif @perfume.question == "1121" %>
                <h6>ローズ</h6>
                <p>華やかで上品な香り</p>
                <p>ストレスを緩和してくれる効果がある</p>

                <% elsif @perfume.question == "1122" %>
                <h6>ラベンダー</h6>
                <p>優しく女性らしい香り</p>
                <p>気持ちを落ち着かせてくれる</p>

                <% elsif @perfume.question == "1211" %>
                <h6>ジャスミン</h6>
                <p>爽やかなのに官能的な香り</p>
                <p>幸福感を得やすい</p>

                <% elsif @perfume.question == "1212" %>
                <h6>ピーチ</h6>
                <p>フレッシュで優しい香り</p>
                <p>アンチエイジングにも最適</p>

                <% elsif @perfume.question == "1221" %>
                <h6>アップル</h6>
                <p>特徴的で甘い香り</p>
                <p>万人受けしやすい</p>

                <% elsif @perfume.question == "1222" %>
                <h6>ユーカリ</h6>
                <p>しっかりとした優しい香り</p>
                <p>浄化作用があり。気持ちを落ち着かせてくれる</p>

                <% elsif @perfume.question == "2111" %>
                <h6>ローズマリー</h6>
                <p>きりりとした強めの香りが特徴的</p>
                <p>美容効果が高い</p>

                <% elsif @perfume.question == "2112" %>
                <h6>ベルガモット</h6>
                <p>柑橘系の果実</p>
                <p>甘くてフレッシュな、万能な香料</p>

                <% elsif @perfume.question == "2121" %>
                <h6>ムスク</h6>
                <p>雄のジャコウジカの腹部にある香嚢から抽出した香料</p>
                <p>官能的で重い香り</p>

                <% elsif @perfume.question == "2122" %>
                <h6>アンバー</h6>
                <p>マッコウクジラの結石から抽出した香料</p>
                <p>魅惑的で色気のある香り</p>

                <% elsif @perfume.question == "2211" %>
                <h6>シナモン</h6>
                <p>甘いスパイスの香り</p>
                <p>香水のアクセントとしてよく使われる</p>

                <% elsif @perfume.question == "2212" %>
                <h6>バニラ</h6>
                <p>甘くて官能的な香り</p>
                <p>上品で年齢を問わず人気が高い</p>

                <% elsif @perfume.question == "2221" %>
                <h6>イランイラン</h6>
                <p>色気のある濃厚で甘い香り</p>
                <p>恋愛に効果があり</p>

                <% elsif @perfume.question == "2222" %>
                <h6>サンダルウッド</h6>
                <p>お香としてよく使われる白檀の香り</p>
                <p>集中力を高める効果もあり</p>

                <% end %>

        </div>
```

##4.ルート周り
```ruby:routes.rb
#省略
resources :perfumes
#省略
```
以上です！