現在作成しているポートフォリオのFlashメッセージにオリジナリティを加えてみた
弄った内容は、Flashに分岐をつけて状況によって内容を変化させる。そして、message_typeによってアイコン画像も変化させる。
てな感じ
めちゃくちゃいいです!!!
自分の作っている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の値を変化させています。
重み付けランダムも調べてはみたが意味不明すぎました・・・
これをcreate
とupdate
の中に埋め込んでます。
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 | ロボット | 業務的 |
にしてます。