Shoeisha Technology Media

CodeZine(コードジン)

特集ページ一覧

Grailsのバリデーションとリレーションシップ

Groovy+GrailsでRailsなWeb開発 第4回

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加
2009/05/27 14:00

 この連載ではJavaプログラマを対象に、Groovyというスクリプト言語を使ってRuby on Railsライクな開発を行えるWebアプリケーションフレームワーク「Grails」を紹介します。今回は、データベースを利用する上で重要な「バリデーション」と「リレーションシップ」について、その仕組みと使い方を説明していきましょう。

目次

はじめに

 前回、Boardsというテーブルを用意し、これを利用した簡単なサンプルを作成しました。このサンプルでは、レコードの表示・追加・更新・削除といった基本的な機能を作成しました。今回は、このサンプルをもとに、実用面で必要となる機能を実装しながらGrailsの持つ機能について説明をしていくことにしましょう。今回取り上げるのは、入力された値のチェックを行う「バリデーション」と、複数テーブルを結合し処理するために用意された「リレーションシップ」についてです。

対象読者

  • JSPを書くのは正直しんどい……と近頃感じる人。
  • Ruby on Railsスタイルの開発に興味があるという人。
  • MVCフレームワークをJavaで学びたい、という人。

バリデーションについて

 まずは、入力値のバリデーションについてです。例えば、新しいレコードを追加したり、レコードの編集をしたりするとき、フォームに値を記入して送信し、処理を行います。このとき、入力された値が期待通りの形になっているかどうか、それをチェックするのが「バリデーション」です。

 通常は、送信された値を1つ1つチェックして正しく入力されているかどうかを確認していくわけですが、Grailsには最初からバリデーションのための仕組みが用意されており、簡単な設定を行うだけでバリデーションを行うことができます。では、やってみましょう。

constraintsの設定

 前回、簡単なメッセージを登録する「Boards」というドメインクラスを作成しました。これは、次のように定義されていました。

class Boards {
    Long id
    String name
    String title
    String content

    static constraints = {
    }
}

 このとき、「このconstraintsというのはなんだろう?」と思った人もいたはずです。実をいえば、このconstraintsが、バリデーションの設定情報を管理するためのものだったのです。では、このconstraintsの値を次のように修正しましょう。

static constraints = {
    name(blank:false)
    title(blank:false)
}

 これは、nameとtitleに、それぞれ入力必須のバリデーションを設定したものです。設定内容については後に触れますが、このconstraintsの値は、次のような形で値を設定していきます。

static constraints = {
    項目名(種類:値, 種類:値,……)
    ……項目が続く……
}

 チェックする項目の後にあるカッコに、設定するバリデーションの種類と必要な値を記述していきます。name(blank:false)というのは、nameという項目に、blankという設定をfalseで設定する、という意味だったわけです。

コントローラーの修正

 これで、Boardsドメインクラスに、バリデーションが設定されました。が、これだけではまだ不完全です。設定したバリデーションがきちんと機能するように、コントローラーを修正しましょう。ここでは、新たに項目を追加する「add」を次のように修正します。

def add = {
    if (request.getMethod() == 'POST'){
        def board = new Boards(params)
        if (board.save()){
            redirect(action:index)
        } else {
            board.errors.allErrors.each {
                println it.getField() // デバッグ用
            }
        }
    }
}
図1 addのフォームを記入して送信する。NAME,TITLEのいずれかが書かれていないと、再度add画面が現れ再入力することになる。
図1 addのフォームを記入して送信する。NAME,TITLEのいずれかが書かれていないと、再度add画面が現れ再入力することになる。

 これで修正完了です。実際にaddにアクセスしてレコードを追加してみましょう。NAME,TITLEのどちらかが空のままだと、再度addの画面が表示されます。コマンドプロンプトなどの標準出力をチェックしていると、エラーの発生したフィールド名が出力されることを確認できます。

図2 grails run-appで実行した場合、コマンドプロンプトにバリデーションではじかれたフィールド名が書き出される。
図2 grails run-appで実行した場合、コマンドプロンプトにバリデーションではじかれたフィールド名が書き出される。

  • ブックマーク
  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

  • 掌田 津耶乃(ショウダ ツヤノ)

    三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。 ※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開中。またGoogle+プロフィールはこちら。

バックナンバー

連載:Groovy+GrailsでRailsなWeb開発

もっと読む

All contents copyright © 2005-2019 Shoeisha Co., Ltd. All rights reserved. ver.1.5