LoginSignup
5
6

More than 1 year has passed since last update.

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

Posted at

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

1.コントローラー設計

2.データベース周り

3.Viewページ周り

4.ルート周り

1.コントローラー設計

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.データベース周り

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

3.Viewページ周り

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>
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 %>
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.ルート周り

routes.rb
#省略
resources :perfumes
#省略

以上です!

5
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
6