2008年11月24日月曜日

第13.8回Grailsコードリーディング(その2) Grails本気の入門~2時間でいけるところまでライブコーディング!?をまとめてみました

7.Grailsロゴの下に、ItemControllerというリンクがあるので、クリックするとItemListページが表示されます。


8.新規登録してみます。
メニューバーのNew Itemをクリックすると、新規登録ページが開きます。


適当に入れてCreateボタンをクリックすれば登録完了のページが表示されます。

※priceは入れないと、nullは許してないよ、っていわれますのでそれは後述参照で。


9.登録データの表示画面でEditをクリックすれば、再編集ページになります。
ここで編集してupdateボタンをクリックすれば、データは更新されます。deleteをクリックすればデータは削除されます。メニューバーのItemListをクリックすれば、登録したデータがリスト表示されます。デフォルトでは11件以上のデータを登録すると次ページに飛べるようなページネイトが表示されます。


ちなみにリストの各ヘッダをクリックすると、昇順降順がソートされます。
下記は、priceをソートしたところ。

ここまでで商品データの登録、確認、再編集、更新、削除、リスト表示が確認できます。



で、大抵この辺までで、最速なら5分ぐらいでいけるはず。
お客さんの反応は、まだ「へー」ぐらい。ここで乗ってくるのは、プログラムに興味がある人ぐらい。
「あのさ、エクセルのとき、名前は入力してないといけないとか、やってたな。
あと、1万円以上の商品は無いんだよね、まえ間違えちゃって怒られたよ業者にさ。
ああ、でも決まってないときもあるなあ。。。
それとこのSpecってのは、もっとたくさん文字はいるよ、こんなんじゃ収まらないねえ。」

10.次にバリデーション(フィールドの制約)を付けてみます。
nameは、商品名なので必須にします。
ドメインクラスのItem.groovyを開いて、constraintsを追加します。

class Item {

String name
String spec
Long price
Date release

static constraints = {
name(blank:false) //必須入力
spec(maxSize:4000) //textareaになる
price(max:10000L,nullable:true) //10001以上はだめだよ,nullでもいいよ
release()
}
}

ちなみに、このconstraintsに書いたフィールドの順番で、scafflodされたViewの中の表示・入力の順番が変わります。何も書いていないと、フィールド名のアルファベット順(name→price→release→spec)になります。
priceは、Integerにしてあると、10000だけで良いようです。Longだと10000Lと、明示してあげないといけないようです。



「この日付のとこさ、年月とか逆になってるよ。」
「それ後でやりまーす。その前に、商品って自社もあるけど、業者さんのもありますよね」
「ああ、そうそう。100社あるかないかぐらいだね。そうだよ、そこがパスワードかかってて変えられないんだよ、失礼なこった。」

11.製造元をComanyとしてドメインクラスを作ります。

$ grails create-domain-class company


12.会社名と、備考欄ぐらいの簡単なフィールドと、商品(Item)との関連付けを定義します。
折角なので、会社名は必須に、備考はテキストエリアにしてみます。

class Company {

static hasMany = [items:Item]

String name
String note

static constraints = {
name(blank:false)
note(maxSize:4000)
}
}

hasMany = [items:Item]とすることで、Companyには、itemsとして、Itemがいくつかぶら下がってますよ、ということになります。

13.商品(Item)にも、その関連付けを定義します。
Item.groovyに2行追加します。

class Item {

static belongsTo = [company:Company] //追加

String name
String spec
Long price
Date release

static constraints = {
name(blank:false)
spec(maxSize:4000)
price(max:10000L)
company() //追加
release()
}
}

同じ商品を、違う業者が製造していることはないので、1対多になります。



おっしゃ、ちょっとここまでで3分ぐらい経過しているかもしれないので、お客さんは「?」になります。そうならないように、「しゃべり」をこの辺で入れるのも大事です。
これで製造元の登録を見せよう、と思っても、ちょっとまった。
多分後ろから須江さんが「…Controllerが無いよ」とささやいてくれますので、落ち着いて次の行動に。

14.Companyコントローラーを作成し、Itemのときと同じようにscaffoldを定義します。

$ grails create-cotroller company


class CompanyController {
def scaffold = true
}


15.今まで作ったItemとCompanyがどんな感じになっているか、ここまでの動作を確認してみます。
もう一回run-appして、ブラウザを確認すると、新しいコントローラー(CompanyController)が出来ています。


16.製造元の会社を登録してみます。
CompanyControllerをクリックして、New Companyをクリックすると、新規登録画面が表示されます。


17.Createボタンで登録され、Show画面(登録した内容の表示画面)に切り替わります。


18.Editボタンをクリックしてください。編集画面が表示されますが、その中のItemsのところに、「Add Item」というリンクボタンが表示されています。


19.Add Itemをクリックすると、Itemの新規登録ページに切り替わります。


20.Createボタンをクリックして登録すると、Show画面になります。


21.ここにある「Company:1」をクリックすると、CompanyのID:1のShow画面になります。
ここで、「Company:1」に、「Item:1」がちゃんとぶら下がりました。
下は、Editボタンをクリックしたところです。


その3へ続く。。。

0 件のコメント: