libro
www.tuyano.com
初心者のためのGroovy/Grails入門

データベースアクセスの基本(CRUD) (3/4)

作成:2013-11-02 12:20
更新:2013-11-02 12:20

■ドメインの更新

続いて、ドメインインスタンスの更新です。ドメインの更新そのものは非常に簡単です。新規作成と同じ「save」を呼び出せばいいのです。

ただし、そのためには、「更新するインスタンスを取得する」「値を書き換える」といった作業が必要になります。これらについてまとめておきましょう。

●IDによる検索を行う「get」
更新するインスタンスを取得するには、ドメインクラスの「get」メソッドを使うのが一番でしょう。これはIDを指定してインスタンスを得るためのものです。例えばSampleDataクラスなら、
変数 = SampleData.get( 番号 );
こんな感じで呼び出せば、指定のID番号のインスタンスを得ることができます。

●インスタンスの値の変更
取得したインスタンスの値を書き換えるのは簡単です。保管されている値はただのフィールドですから、それを直接書き換えればいいだけです。例えばSampleDataの名前を変更したければ、インスタンスを取得し、○○.name = "hoge";というように書き換えるだけです。

こうして値を新しいものに変更したら、saveで保存すればいいのです。では、利用例を下にあげておきましょう。今回はupdateアクションとして用意してあります。これは、アクセス時に「id=番号」というパラメータを付けてアクセスをすると、そのデータが設定された状態でフォームが表示されます。例えばID = 1のデータを編集するなら、

http://アプリのアドレス/sampleData/update?id=1

こんな感じでアクセスをしてください。ただし、指定IDのインスタンスが見つからなかったときの例外処理などは何もしてないので、そのへんは各自で対応してください。

インスタンスを取得したら、ビュー側でその値をvalueに設定する形でフォームのコントロール類を用意します。このとき、<input type="hidden" name="id">を用意しておくのを忘れないように。idが送られないと検索しようがないですからね。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

package gralisapp

class SampleDataController {

    def update = {
        def id = params.id;
        def data = SampleData.get(id);
        def arr = [
            'title':"Update Data",
            'msg':"更新してください。",
            'data':data
        ];
        if (request.method=='POST'){
            data.name = params.name;
            data.mail = params.mail;
            data.age = Integer.parseInt(params.age);
            data.save();
            redirect(action:"index");
        }
        arr;
    }
    
}


※update.gsp

<!DOCTYPE html>
<html>
<head>
    <meta name="layout" content="mylayout" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Grails Hello</title>
</head>
<body>
    <h1>${title}</h1>
    <h2>${msg}</h2>
    <form method="post" action="update">
    <table>
    <input type="hidden" name="id" value="${data.id}">
    <tr><td>名前:</td><td><input type="text" name="name" value="${data.name}"></td></tr>
    <tr><td>メール:</td><td><input type="text" name="mail" value="${data.mail}"></td></tr>
    <tr><td>年齢:</td><td><input type="text" name="age" value="${data.age}"></td></tr>
    <tr><td></td><td><input type="submit"></td></tr>
    </table>
    </form>
</body>
</html>

※関連コンテンツ

「初心者のためのGroovy/Grails入門」に戻る