Model(モデル)を使ってデータベースアクセスする[Scala編] (6/7)
作成:2013-02-10 10:18
更新:2013-02-10 10:18
更新:2013-02-10 10:18
■コントローラーからモデルを使う
では、コントローラーからモデルクラスを利用してデータベースにアクセスを行なってみましょう。今回は、indexとsendformの2つのアクションメソッドを用意することにします。indexでは入力フォームとレコードの一覧を取得て表示をします。フォームに値を書いて送信するとsendformにPOST送信され、ここでレコードの保存を行います。
下のリスト欄に、コントローラー(Application.scala)と、2つのアクションで使用するビューテンプレート(index.scala.html)のソースコードを掲載しておきました。
●レコードの取得処理
indexでの全レコードの取得はとても簡単です。MydataのgetAllを呼び出すだけですから。
●レコードの保存処理
レコードの保存は、sendformで行なっています。これも非常に単純です。送信されたフォーム情報からMydataを取り出し、その「addData」を呼び出すだけです。
いずれも、既に基本的な処理部分はモデルクラス側に用意していますから、コントローラーではただメソッドを呼び出すだけで済みます。モデルを定義する利点は、ここにあります。
下のリスト欄に、コントローラー(Application.scala)と、2つのアクションで使用するビューテンプレート(index.scala.html)のソースコードを掲載しておきました。
●レコードの取得処理
indexでの全レコードの取得はとても簡単です。MydataのgetAllを呼び出すだけですから。
val datas = Mydata.getAllこれで取得したものをビュー側でテーブルに出力しています。以下の部分ですね。
@for(data:Mydata <- datas){変数datasから順にMydataを取り出し、その値をテーブルとして書き出しています。getAllではas(Mydata.data)によりMydataインスタンスの形で値を取り出すようにしていましたから、こんな具合にコレクションの繰り返し処理で簡単にレコードを処理していくことができます。
<tr>
<td>@data.name</td>
<td>@data.mail</td>
<td>@data.tel</td>
</tr>
}
●レコードの保存処理
レコードの保存は、sendformで行なっています。これも非常に単純です。送信されたフォーム情報からMydataを取り出し、その「addData」を呼び出すだけです。
var myForm = form1.bindFromRequestFormの使い方は前回フォームヘルパーのところで説明しました。bindFromRequestにより送信されたフォーム情報を管理するFormインスタンス(変数form1)にフォームの値をバインドしたものをmyFormとして取得し、そこからgetでMydataを取り出してaddDataする、という流れになります。
val data: Mydata = myForm.get
val result = data.addData
いずれも、既に基本的な処理部分はモデルクラス側に用意していますから、コントローラーではただメソッドを呼び出すだけで済みます。モデルを定義する利点は、ここにあります。
(by. SYODA-Tuyano.)
※プログラムリストが表示されない場合
AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。
●プログラム・リスト●
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | ※Application.scala package controllers import models. _ import play.api. _ import play.api.mvc. _ import play.api.data. _ import play.api.data.Form import play.api.data.Forms. _ object Application extends Controller { val form 1 = Form( mapping( "name" -> text, "mail" -> text, "tel" -> text )(Mydata.apply)(Mydata.unapply) ) def index = Action { val title = "サンプルページ" val msg = "サンプルのページです。" val datas = Mydata.getAll Ok(views.html.index(title, msg, form 1 , datas)) } def sendform = Action { implicit request = > var myForm = form 1 .bindFromRequest val data : Mydata = myForm.get val result = data.addData val title = "サンプルページ" val msg = "名前:" + data.name + ", メール:" + data.mail Ok(views.html.index(title, msg, myForm, null )) } } ※index.scala.html @ (title : String, message : String, myForm : Form[Mydata], datas : List[Mydata]) @ main(title) { <h 1 > @ title</h 1 > <p> @ message</p> @ helper.form(action = routes.Application.sendform) { @ helper.inputText(myForm( "name" )) @ helper.inputText(myForm( "mail" )) @ helper.inputText(myForm( "tel" )) <input type = "submit" > } <hr> @ if (datas ! = null ){ <p>Mydata list</p> <table> <tr> <th>Name</th> <th>Mail</th> <th>Tel</th> </tr> @ for (data : Mydata <- datas){ <tr> <td> @ data.name</td> <td> @ data.mail</td> <td> @ data.tel</td> </tr> } </table> } } |
※関連コンテンツ