CodeZine(コードジン)

特集ページ一覧

Grailsでデータベースを利用しよう

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

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

目次

レコードの取得と更新処理

 レコードの修正は、2段階で実行されます。第1段階では、アクセスしたときに送られたIDを元に、編集するレコードを取り出しビューに渡す、という処理です。第2段階は、送信されたフォームを元に、指定のIDのレコードを書き換えるという処理になります。

 まず第1段階の「指定したIDのレコードを取り出す」という部分を見てみましょう。これは、以下の文で行っています。

def board = Boards.get(params.id)

 ドメインクラスにある「get」は、引数で指定したIDのレコードを返す働きをします。これでレコードが変数boardに設定されました。後は、[board:board]というようにして、ビューに値を渡すだけです。意外と簡単です。

 続いて第2段階の「指定したIDのレコードを更新する」という処理です。これは、まずgetで更新するID番号のレコードを取得し、その内容を変更してから保存する、ということを行います。レコード内容の変更は、

board.properties = params

 たったこれだけです。「properties」は、そのドメインクラスに保管されている各フィールドの値を管理するプロパティです。ここに、送信されたフォームの内容をまとめたparamsを渡せば、値が新しいものに置き換わります(もちろん、フォーム側で各フィールドと同じ名前で項目を用意しているから可能になっています)。

 後は、「save」で保存するだけです。saveは、新たにレコードを追加する場合にも使いしたね。saveを実行すると、そのIDのレコードがなければ新たにレコードを追加し、既にそのIDのレコードが存在すれば、そのレコードの内容を更新するのです。

レコードの削除

 最後に、レコードの削除を作成しましょう。これは、先ほどの更新処理をアレンジします。IDを指定してアクセスすると、ページにそのIDのレコードが表示されます。そしてそのまま送信すると、そのIDのレコードが削除されるようにしましょう。

 まずは、ビューの作成です。「views」の「boards」内に「del.gsp」というファイルを作成し、次のようにフォームを用意します(ボディ以外は他のページと同様です)。

<body>
	<h1>Grails Boards</h1>
	<h2>レコードの削除</h2>
	<g:form controller="boards">
	<g:hiddenField name="id" value="${board.id}" />
	<table>
		<tr>
		<td>ID:</td>
		<td>${board.id}</td>
		</tr>
		<tr>
		<td>NAME</td>
		<td>${board.name}</td>
		</tr>
		<tr>
		<td>TITLE</td>
		<td>${board.title}</td>
		</tr>
		<tr>
		<td>CONTENT</td>
		<td>${board.content}</td>
		</tr>
		<tr><td></td>
		<td><g:actionSubmit value="DELETE" action="del"/></td>
		</tr>
	</table>
	</g:form>
</body>

 ここでは、フォームには非表示フィールドにIDの値を保管しているだけです。後は、コントローラーから渡されたboardの値をそれぞれのところに出力しています。

delアクションの作成

 では、コントローラーにdelアクションを作成しましょう。これは次のようになります。

def del = {
	if (params.id == null){
		redirect(action:index)
	}
	def board = Boards.get(params.id)
	if (request.getMethod() == 'POST'){
		board.delete()
		redirect(action:index)
	} else {
		[board:board]
	}
}

 先ほどのeditと同様に、「boards/del?id=番号」というようにアクセスすると、指定したID番号のレコードを削除するための画面が現れます。ここで内容を確認し、送信すると、そのレコードが削除されます。

 ここで行っているのは、「IDが送信されていない場合にはindexにリダイレクトする、IDが送られていてPOSTでない場合にはそのIDのレコードをgetしビューに渡す」というもの。この部分は先の更新処理とまったく同じです。

 違っているのは、POSTされたときにレコードの削除をする、という部分だけです。レコードの削除は、まず削除するレコードをgetで取得した後、「delete」メソッドを呼び出して行います。これで、現在読み込まれているレコードが削除されます。

図10:delに、id=1というようにパラメータを付加してアクセスすると、そのID番号のレコードが表示される。このままボタンを押して送信すると削除される。
図10:delに、id=1というようにパラメータを付加してアクセスすると、そのID番号のレコードが表示される。このままボタンを押して送信すると削除される。

まとめ

 以上で、データベースの基本処理となる「一覧表示」「新規追加」「更新」「削除」といった操作について一通りできるようになりました。これらの機能をアレンジすれば、ごくシンプルなデータベース利用のアプリケーションは作れるようになるでしょう。

 実際にやってみれば分かるように、Grailsのドメインを使ったデータベース操作は非常にシンプルです。ほとんどが、簡単なメソッドを呼び出すだけで行えます。これは、Grailsに内蔵されている「GORM(Grails Object Releational Mapping)」と呼ばれるO/Rマッピング機能のおかげです。Hibernate3を使って作られたGORMは、非常にシンプルなデータベースアクセス機能を提供してくれています。ドメインにあるメソッドを使ってデータベースを操作している限り、ほとんどデータベースとのやりとりや実行されるクエリーを意識することはないでしょう。

 データベースから気軽にレコードを持ってこれるようになると、作成できるアプリケーションの幅もぐっと広がります。ここで紹介した基本操作を使って、自分なりに簡単なアプリを考えてみましょう。思った以上に簡単に、データベースアクセスするWebアプリが作れることに驚くはずです。



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

バックナンバー

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

もっと読む

著者プロフィール

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

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

あなたにオススメ

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