LoginSignup
2
0

More than 3 years have passed since last update.

Rails 簡易的なチュートリアル機能の実装

Last updated at Posted at 2021-02-01

実装イメージ

・〇件投稿しよう!
・〇件いいねをつけよう!
みたいな簡易的なやつです。
image.png
ユーザーのマイページに実装します。
項目ごとに完了したら『クリア!』を表示。
オマケで、全部完了したら名前の横の初心者マークが外れてダサくなくなるギミックを付けます。

条件分岐とカラム追加で実装します。
もっとシンプルなやり方があれば教えていただけますと幸いです。

前提

  • Rails 5.2.4.4
  • ユーザー及び、チュートリアルに含める投稿などのテーブルは既にある
  • ユーザーと各種投稿などのアソシエーションも組めている

Userテーブルにカラムを追加

該当のユーザーがチュートリアルクリアしたかどうか?のカラムを追加します。
2択なのでboolean型、カラム名はbeginnerとしてみました。

rails g migration AddColumnToUser beginner:boolean

trueの場合はチュートリアル完了前
falseの場合はチュートリアル完了後という感じにします。

migrate/0X0X0X0X_add2_column_to_user.rb
class AddColumnToUser < ActiveRecord::Migration
  def change
    add_column :users, :beginner, :boolean, default: true, null: false
  end
end

デフォルトでtrue(チュートリアル完了前)を指定。

rails db:migrate

マイグレーションコマンド参考

Viewにチュートリアル内容と初心者マーク(条件分岐)を記述

今回はユーザーのマイページに記述します。
例えばチュートリアル内容が、
・投稿(tweetモデルとします)を2つ以上、
・tweetにいいね(favoritesモデルとします)を3回以上
であれば…

show.html.erb
<!--チュートリアル完了後の場合-->
<% if user.beginner == false %>
  <p>チュートリアル完了!</p>

<!--チュートリアル完了前の場合-->
<% else %>
  <p>
    2つ以上のtweetをしよう!
    <% if @user.tweets.count < 2 %>
      (<%= @user.tweets.count %> / 2)
    <% else %>
      クリア!
    <% end %>
  </p>
  <p>
    3つ以上のtweetにいいねをしよう!
    <% if @user.favorites.count < 3 %>
      (<%= @user.favorites.count %> / 3)
    <% else %>
      クリア!
    <% end %>
  </p>
<% end %>

こんな感じです(ハイライトがおかしいですが、構文変ですかね…?)。
取り急ぎ、雰囲気は伝わるかと思います。

オマケですが、チュートリアル完了前の場合は
ユーザー名の横に初心者マークを付けます。
その他、ユーザー一覧など、任意の場所につけてください。

show.html.erb
<p>
  <%= @user.name %>
  <% if @user.beginner == true %>
    <%= image_tag '初心者マーク.png', :size =>'14x14' %>
  <% end %>
</p>

コントローラーに追記(チュートリアル完了でuser.beginnerをfalseに)

チュートリアルが終わっているかどうかのジャッジを、
マイページへ遷移するコントローラーで行います。
今回の場合、showアクションの中に追記します。

users_controller.rb
# チュートリアルが終わっていればbeginnerをfalseにする
if @user.beginner == true && @user.tweets.count >= 2 && @user.favorites.count >= 3
  @user.update(beginner: false)
end

これで、実装完了です。
チュートリアルが完了した状態で、
マイページにアクセスするタイミングで、
beginnerカラムがfalseになり、初心者マークは外れます。
また、チュートリアル内容は消えて、完了のメッセージが表示されるはずです。

補足

beginnerカラムを追加せずとも、Viewの条件分岐のみでも実装可能です。
ただ、その場合、チュートリアル完了後にtweet削除等で2tweetを下回ると
初心者マークが復活してしまいます。
なんかあれなので、このやり方で実装しました。

間違っている点、補足などあればご教示いただけますと幸いです。
よろしくお願いいたします。

2
0
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
2
0