バリデーションとクエリ
データ整合性とクエリです。
「バリデーションとクエリ」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
バリデーションを行う理由
バリデーションは、データがデータベースに到達する前に検証します。レコードを保存するときに実行され、無効なデータはわかりやすいメッセージとともに拒否されます。
- 不正なデータ(名前の未入力や形式が不正なメールアドレスなど)が保存されるのを防ぎます。
- Rubyで実行されるため、メッセージをユーザーに簡単に表示できます。
- データベースの制約を補完しますが、置き換えるものではありません。
存在バリデーション
最も一般的なルールは、空白以外の値を必須にする validates :field, presence: true です。この値なしで保存すると失敗し、エラーが記録されます。
class User < ApplicationRecord
validates :name, presence: true
end
# User.create(name: "") fails to save一意性バリデーション
uniqueness: true は、同じメールアドレスを持つユーザーが2人いる場合のような重複値を防ぎます。負荷の高い並行処理では、バリデーションだけでは競合状態が発生するため、一意なデータベースインデックスと組み合わせてください。
class User < ApplicationRecord
validates :email, presence: true, uniqueness: true
end形式と長さ
その他の組み込みバリデータには、次のものがあります。
length: { minimum: 8 }は長さを制限します。format: { with: /regex/ }はパターンを検証します。numericality: trueは数値を検証します。inclusion: { in: [...] }は許可された値だけを受け付けます。
class User < ApplicationRecord
validates :password, length: { minimum: 8 }
validates :age, numericality: { greater_than: 0 }
endvalid? と errors
valid? を呼び出すと、保存せずにバリデーションを実行できます。保存に失敗した後は、record.errors に問題が保持され、errors.full_messages でUIに表示しやすい文字列を取得できます。
user = User.new(name: "")
if user.valid?
user.save
else
puts user.errors.full_messages
endsave と save! の違い
保存には2つの方法があります。
saveはtrue/falseを返すため、結果に応じて処理を分岐します。save!は失敗時にRecordInvalidを送出します。無効なデータを例外として扱いたい場合に便利です。
同じパターンが create/create! と update/update! にも適用されます。
user.save # => false if invalid
user.save! # => raises if invalidカスタムバリデーション
組み込みバリデータでは対応できないルールには、メソッドを作成して validate に登録します。errors.add で問題を追加します。
class User < ApplicationRecord
validate :name_not_admin
def name_not_admin
if name == "admin"
errors.add(:name, "cannot be admin")
end
end
endwhereを使ったクエリ
クエリインターフェースは、行を絞り込む where から始まります。where は遅延評価されるリレーションを返すため、データベースにアクセスする前にさらにメソッドをチェーンできます。
User.where(active: true)
User.where("age > ?", 18)
User.where(role: ["admin", "editor"])並べ替えと制限
チェーン可能なメソッドで結果を整形します。
order(created_at: :desc)は並べ替えを行います。limit(10)とoffset(20)はページネーションに使用します。select(:id, :name)は取得するカラムを選択します。
User.where(active: true)
.order(created_at: :desc)
.limit(10)集計と遅延読み込み
集計用ヘルパーはデータベース関数を実行します。count、sum(:amount)、average(:age)、maximum、minimum などがあります。リレーションは遅延評価されるため、列挙したとき、集計メソッドを呼び出したとき、または to_a を使ったときにだけクエリが実行されます。
User.where(active: true).count
Order.sum(:total)
User.average(:age)スコープ
スコープは、再利用可能なクエリに名前を付け、きれいに組み合わせられるようにします。スコープはリレーションを返し、互いに、また where とチェーンできます。
class User < ApplicationRecord
scope :active, -> { where(active: true) }
scope :adults, -> { where("age >= ?", 18) }
end
User.active.adults理解度チェック
バリデーションとクエリについての理解度を確認します。
復習:バリデーションとクエリ
データを保護して取得する方法を学びました。
- 存在、一意性、長さ、形式などのバリデーションで、保存時のデータを検証します。
valid?とerrorsで問題を確認し、save!は例外を送出します。- カスタムバリデーションで特殊なルールに対応できます。
where、order、limit、集計、スコープを組み合わせて遅延評価されるクエリを構築します。
これでModels and Active Recordコースは完了です。
AI チューターと学ぶ Ruby — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 29
- レッスン
- 109
よくある質問
「バリデーションとクエリ」レッスンは無料ですか?
はい。「バリデーションとクエリ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「バリデーションとクエリ」で何を学びますか?
データ整合性とクエリです。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「バリデーションとクエリ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Active Record の基礎
- マイグレーション
- 関連付け
- バリデーションとクエリ