SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Groovy+GrailsでRailsなWeb開発

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

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

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

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

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
バリデーションの実行

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Groovy+GrailsでRailsなWeb開発連載記事一覧

もっと読む

この記事の著者

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3916 2009/05/27 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング