プログラミング

Ruby on Railsで「継続日数〇〇日目」の実装方法(丁寧に解説)

こんにちは、まるです。

Ruby on Rails でブログや投稿型のWebアプリを開発していると、「連続投稿〇〇日目!」と出しておくと、ユーザーのモチベーションも上がり、数字が積みあがっていくのも楽しいですよね。

今回はその実装方法を丁寧に解説します。

「昨日以前に投稿されたレコードのカラム「created_at」に昨日の日付があれば変数に1を足していく。」を繰り返す。といった処理を行います。

1行目

indexテーブルのデータを変数「continued 」に入れます。
indexテーブルは投稿データが入ってると思ってください。
「.where(user_id:current_user.id)」でログインユーザーに基づいてるので、
ユーザーの投稿データが入っていることになります。

2行目

継続日数出力に使うインスタンス変数を定義

3行目

while文で使う変数を定義

4行目

「continued」のレコードの数だけ、繰り返し処理を行います。

5行目

「unless」はifの反対
「.where(created_at: i.day.ago.all_day)」は「i」日前の「created_at」を検索
「.blank?」でnilもしくは空かどうかを判定

6,7行目

i日前にデータがあれば、数を足していく。
なければその後のif文でbreakさせて繰り返し処理を終了させます。

おそらく、現場などでは break if ~~
と書けと言われるかもしれません。。

ただ、これだと当日にデータを投稿しても今日のデータがあるかどうかの判定はしていないので、次の日にならないと継続日数がプラスされません。
なので、こうしました。

5~9行目を追加しました。

この処理によって、違和感なく継続日付の出力ができます。
viewに受け渡すインスタンス変数は「@Durationdays」です。

プログラミング学習管理アプリ「プロスタ」をリリースしました。
是非ご活用ください。
ProSta

 

COMMENT

メールアドレスが公開されることはありません。