Rails Flashメッセージで遊んでみた

現在作成しているポートフォリオFlashメッセージにオリジナリティを加えてみた


弄った内容は、Flashに分岐をつけて状況によって内容を変化させる。そして、message_typeによってアイコン画像も変化させる。

てな感じ

f:id:yukitoku_sw:20200202152630p:plain


めちゃくちゃいいです!!!


自分の作っているTodoAppのざっくり説明

Taskテーブルにdone:booleanというカラムを付けて、実行中のタスク or 完了済みタスクと分けて表示できるようになっています。

あとは普通です・・


作り方

設計とかはせずに思いついたままに書いてたらできただけ

controller

まず初めに。FizzBuzz計算ってあるじゃないですか?

それを利用したくて書いたもの

tasks_controller.rb内のprivateの中に書いてます。(どこに書くのが最適か調べたがわからなかった。けど動いてるからいいか。。)

[ tasks_controller.rb ]

(省略)

    def fizz_buzz_flash
      done_count = current_user.tasks.where(done: true).count
      if @task.done?
        if done_count % 50 == 0
          flash[:warning] = "#{done_count}件のタスク達成!<br>おめでとうございます"
        elsif done_count % 12 == 0
          flash[:warning] = "よくやったな、#{@task.user.name}。"
        elsif (done_count + 1) % 12 == 0
          flash[:warning] = '次<br>回、司 令 官'
        elsif done_count % 5 == 0
          flash[:warning] = 'すごいです!!'
        else
          flash[:warning] = 'お疲れ様です。'
        end
      end
    end

新規作成か更新 された@taskのdoneカラムがtrue(完了済み)だった場合に、回転数 完了済みタスクの数によってFlashの値を変化させています。


重み付けランダムも調べてはみたが意味不明すぎました・・・


これをcreateupdateの中に埋め込んでます。

class TasksController < ApplicationController
  
  (省略)

  def create
    @task = current_user.tasks.new(task_params)
    if @task.save
      flash[:success] = "タスク「#{@task.title}」を登録しました。"
      fizz_buzz_flash
      redirect_to task_url(@task)
    else
      render :new
    end
  end

  def edit
  end

  def update
    if @task.update(task_params)
      flash[:success] = "タスク「#{@task.title}」を更新しました!"
      fizz_buzz_flash
      redirect_to task_url(@task)
    else
      render :edit
    end
  end

 (省略)

もともと書いていたflash[:success]はあえて残しています。


view

[ layouts/_flash.html.slim ]

- flash.each do |message_type, message|
  .d-flex.flex-row.mb-2
    .mr-2
      - if message_type == "warning"
        = image_tag src="/assets/flash_cat.png", size: '50x50'
      - else
        = image_tag src="/assets/flash_robot.png", size: '50x50'
    .mb-0
      = content_tag(:div, message.html_safe, class: "alert alert-#{message_type}")

割り振りとしては、

type 担当 内容
warning ネコ 応援
success ロボット 業務的

にしてます。


f:id:yukitoku_sw:20200202163127p:plain