試験に備えよう! ベーシック試験出題範囲「モデル開発」解説

Rails7ベーシック試験の実施を前にして、「試験に備えよう!」というこのコラムも4回目を迎えました。
前回はRailsアプリケーション開発で最も重要と言える3つの要素、「ビュー」「モデル」「コントローラー」のうち、「ビュー開発」を取り上げました。
今回は引き続き、「モデル開発」について取り上げます。

この記事はベータ試験の内容を扱っています。ベータ試験の結果、試験内容が調整され、それに伴いこの記事が更新される可能性もあります。予めご承知おきください。(2024年6月30日)

目次

「モデル開発」

出題範囲「モデル開発」では、Active Record、Active Modelについて全体の20%の割合で出題されます。
MVCアーキテクチャにおけるモデルは、アプリケーションの中核となる機能そのもの、ビジネスロジックとビジネスロジックによって扱われるデータへのアクセス処理などが集約されます。

ORM

ORM(Object Relational Mapping、O/Rマッピング、O/Rマッパーとも)とは、オブジェクト指向言語のオブジェクトとリレーショナルデータベースとを結びつける機能です。
RailsではActive Recordによって提供されます。
Active Recordについて学ぶ前に、ORMについてもある程度知識をつけておくことをお薦めします。

クエリメソッド

データベースからデータを取得するためのメソッドとして、クエリメソッドがあります。
以下に挙げるような基本的なメソッドについては、その機能と使い方について一通り抑えておきましょう。

  • find、find_by
  • find_each
  • first、last、take
  • where
  • not、or
  • order
  • select、distinct
  • limit、offset

インスタンスの取得、生成

モデルのインスタンスを生成する方法としては、上のようなクエリメソッドを用いる他にもいくつかのメソッドが用意されています。
データベースに関係なくモデルのインスタンスを生成する機能や、データベースのレコードの状況によって挙動を変えるメソッドなどがあります。
名前が似たメソッドも多く混乱してしまうかも知れませんが、使い方の違いについて抑えておきましょう。

  • new
  • find_or_initialize_by
  • find_or_create_by
  • create_or_find_by

アソシエーション

モデルとモデルの関係を表すために用いられるメソッドがあります。
メソッド自体やメソッドのオプションはもちろん、これらのメソッドによって表される1:1、1:n、m:nといった関係の種類についてもあわせて理解して置く必要があります。

  • belongs_to
  • has_one、has_many

バリデーション

モデルに設定された値が適切なものかどうかを検証し、不正な値をデータベースに保存したりプログラムの処理に問題を起こさないようにするための機能がバリデーションです。
Railsでは、Active Modelによって提供されます。
ActiveModel::Validations下に定義された各検証機能の機能について、また実際にそれらの機能を使うためのメソッド validatesvalidate_of_* について一通り抑えておきましょう。
たとえば、ActiveModel::Validations::PresenceValidator については以下ように2通りの使い方を確認しておきましょう。

  • validates :name, presence: true
  • validates_presence_of :name

まとめ

ベーシック試験の試験範囲「モデル開発」について解説しました。
この範囲も出題の割合は20%と大きめですが、データベースからデータを取り出すためのクエリメソッド、不正なデータを扱わないようにするためのバリデーションは重要な機能であり、Railsアプリケーションを効率的に開発するためにはぜひとも抑えておきたいところです。
覚えるべきメソッド、オプションも多いですが是非頑張ってみてください。

具体的な学習については、Ruby on Rails チュートリアルをお薦めしています。
Ruby on Rails チュートリアル
https://railstutorial.jp/

また、今後公式問題集の発売も予定しておりますのでお待ちください。

著者/文責: 泉 隼人
・Rails技術者認定試験運営委員会 テクニカルアドバイザー
・神奈川工科大学 情報工学科 客員研究員
・鹿児島県 喜界島出身。10歳の頃N88-BASICに触り、コンピューティングにのめり込む
・興味の赴くまま様々なプラットフォーム、言語を楽しみつつ10数年来に渡りRuby on Railsでの開発業務に従事する
・Webサイト https://9uelle.jp/

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次