レコードの取得と更新処理
レコードの修正は、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」メソッドを呼び出して行います。これで、現在読み込まれているレコードが削除されます。

まとめ
以上で、データベースの基本処理となる「一覧表示」「新規追加」「更新」「削除」といった操作について一通りできるようになりました。これらの機能をアレンジすれば、ごくシンプルなデータベース利用のアプリケーションは作れるようになるでしょう。
実際にやってみれば分かるように、Grailsのドメインを使ったデータベース操作は非常にシンプルです。ほとんどが、簡単なメソッドを呼び出すだけで行えます。これは、Grailsに内蔵されている「GORM(Grails Object Releational Mapping)」と呼ばれるO/Rマッピング機能のおかげです。Hibernate3を使って作られたGORMは、非常にシンプルなデータベースアクセス機能を提供してくれています。ドメインにあるメソッドを使ってデータベースを操作している限り、ほとんどデータベースとのやりとりや実行されるクエリーを意識することはないでしょう。
データベースから気軽にレコードを持ってこれるようになると、作成できるアプリケーションの幅もぐっと広がります。ここで紹介した基本操作を使って、自分なりに簡単なアプリを考えてみましょう。思った以上に簡単に、データベースアクセスするWebアプリが作れることに驚くはずです。
