大ちゃんの駆け出し技術ブログ

RUNTEQ受講生のかわいいといわれるアウトプットブログ

【バリデーション】acceptance

はじめに

こんにちは!大ちゃんの駆け出し技術ブログです。

以前、バリデーションヘルパーであるnumericalityについて記事を書きました。

sakitadaiki.hatenablog.com

このバリデーションはRUNTEQのカリキュラムの応用編で使用したのですが、実際調べればすぐに導入できたバリデーションです。ですので、応用編カリキュラムを修了していたのでそれなりの知識があるだろうというおごりがあり、バリデーション自体は割と調べればすぐに出てきて導入できるのでわざわざ記事にする必要がないんじゃないの?と思っていました。

しかし、先日numericalityについて記事を書いているときにRailsガイドを参考にしていた時のこと。

「あれ?このバリデーション見たことない!」

とか

「このバリデーションそもそも知らない、、、」

という感じで、まあ、 バリデーションへの知識不足が判明してしまったというわけですwww

しかも、ネットにある記事が意外にもバリデーションの記載方法のみを紹介しており、実際にバリデーションした時にどのようなエラーメッセージが出るかだとか、正常に動いていたテストが失敗するようになるのだとかが紹介されている記事はほとんど見受けられませんでした。

これから0→1でPFを作っていくわけですから、バリデーションは当然自分で設定していきます。複雑なモデルを設定する可能性もあるので、バリデーションを使うタイミングはそれ相応にあるでしょう。こういった知識は毎回調べて導入していたらすごい手間ですから、PFの作成段階に入る前になるべく先に勉強しておいた方がいいですね。

前置きが長くなりましたが、これからの記事ではRUNTEQのカリキュラム内で自分で使用することのなかったバリデーションを他の記事に比べてかなり詳しく紹介していこうと思います。あとは記事数稼ぎです!(笑)

今回もいつもと同様に現場Railsのchapter7まで終えている状態のアプリケーション「taskleaf」です。同じ状態でハンズオンで試したいという方は現場Railsのchapter7までを終わらせてから取り組んでください。

acceptanceの概要

Railsガイドでは以下のように説明しています。

このメソッドは、フォームが送信されたときにユーザーインターフェイス上のチェックボックスがオンになっているかどうかを検証します。ユーザーによるサービス利用条項への同意が必要な場合や、ユーザーが何らかの文書に目を通したことを確認させる場合によく使われます。 (引用: Active Record バリデーション - Railsガイド)

Railsガイドは初心者が読むと何を言っているのかよくわからないことが多いと個人的には思っているのですが、この説明はめちゃくちゃわかりやすいと思っています!特に以下の部分!

ユーザーによるサービス利用条項への同意が必要な場合

よくWebサイトで利用規約へのチェックボックスを付けるのを忘れて次の画面に遷移しようとすると、次の画面に遷移することなくエラーメッセージが表示されると思います。


(画像を差し込む!!)

この利用規約に同意させてからアプリを使用するようにする設計は、小さな個人開発サービスを除けば、必ずと言っていいほど使用するかと思います!利用規約に同意させることでトラブルがあった際にアプリ開発側への責任を担保できますからね。

おそらくPF開発するときは使用しないと思っていますが(PFは企業の人が見るので利用規約への同意フローは時間を浪費させる無駄な機能なため)、将来的には個人でサービスも開発したいと思っているので、この際試して将来の自分に使い方を教えるために記事にしておきたいと思います。(あと、ユーザーが何らかの文書に目を通したことを確認させるといったフローはPFに組み込まないとは断言できないので)

acceptanceの使用例

それでは実際に使用してみましょう。

まずチェックボックスを付けるためのカラムを用意しておきましょう!!

と思ったのですが現場Railsのアプリでは既にチェックボックスの付いたカラムが存在するではありませんか!なんと素晴らしい!

https://i.gyazo.com/15242f5e5dd90c3611001fbc45ddfb52.png

表示しているページはユーザー編集ページです。

https://i.gyazo.com/4d5500b1563a8ae82184775772987343.png

表示しているビュー

.form-check
  = f.label :admin, class: 'form_check_label' do
    = f.check_box :admin, class: 'form-check-input'
    | 管理者権限

これを利用してこのカラムにacceptance: trueをつけてみましょう!

# app/models/user.rb
validates :admin, acceptance: true

あとやることは、、、、、、

以上です!!!!!!!wwwwww

これで実装できてます笑こんな実装をすることはありませんが、、

ユーザーが必ず管理者権限を付与しないとユーザーが更新されないので全ユーザー管理者権限のトンデモ状態になってしまいます笑

実際に試してみましょう。チェックをしないでユーザーを作成しようとすると、

https://i.gyazo.com/d5a027168f38b9c9de20c7af20a76710.gif

"Admin must be accepted"と表示されています。これによって、チェックなしではユーザー登録が完了しない奇妙な仕様となってしまいました。

ちなみに、Admin must be acceptedのエラーメッセージはバリデーションの設定で容易に変えられます。

# app/models/user.rb
validates :admin, acceptance: { message: 'でないとユーザーは登録できません' }

表示されるエラーメッセージが変わることを確認してみてください。

https://i.gyazo.com/eba407092b45a2eccc53c37c6e649523.png

以上でacceptanceの紹介を終わります!

ほんとうに簡単な実装で終わってしまいましたね💦

終わりに

本記事で紹介したバリデーションは知っていて損はないと思います。バリデーションは調べればすぐにどのようなバリデーションなのかをすぐに把握することができますが、理解が難しくないことを理解しないまま放置しておくのはあまり賢明ではないですね。今回実装した内容をもとに自分も0→1でPFを作る際は自分の手で実装できるようになった気がします!といっても、念のため確認するためにどうせRailsガイドは開くとは思うんですけどね(笑)

以上、大ちゃんの駆け出し技術ブログでした!