Groovy+GrailsでRailsなWeb開発 第4回
掌田 津耶乃 [著] 2009/05/27 14:00

1 2 3 4 5 →

はじめに

 前回、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で実行した場合、コマンドプロンプトにバリデーションではじかれたフィールド名が書き出される。

プロフィール
掌田 津耶乃 ショウダ ツヤノ

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆活動をする傍ら、ログハウスの普及活動にいそしんでいる。(掌田津耶乃のWebサイトはこちら

※現在、新しいQ&A?サイト「FinQ」を開発、ベータ公開中。また新しい入門記事の投稿サイト「libro」を開発、ベータ公開中。皆さん、ぜひご参加ください!


注目の求人情報
システムエンジニア/株式会社 ディンプス
「無機質で、難しくめんどうなこと」を「人間味のある、楽しくて簡単なこと」に作り変える「ゲーム的発...
システムエンジニア/ゲーム開発会社
■募集職種:サーバー運用エンジニア(スタッフクラス) ■募集内容: ・Linuxサーバーのセットアップ...
サーバ技術者・NE/商社系SIベンダー
・ニーズのヒアリング、提案・見積 (営業と同行にてヒアリング)、提案のための検証 ・システム構築(...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: