Grails 0.5 13分間クッキング(その1)
まずは適当に作ってみよう。Grailsのインストールと環境設定(http://grails.codehaus.org/Japanese+Installation)は終わっているという前提で。
コマンドラインからWebアプリ(bookstoreという名前)を作成してカレントディレクトリを変更。
grails create-app bookstore cd bookstore
次にドメインクラス、コントローラを作成。
grails create-domain-class Book grails create-domain-class Author grails create-domain-class Publisher grails create-controller Book grails create-controller Author grails create-controller Publisher
grails-app/controllersにBookController.groovy、AuthorController.groovy、PublisherController.groovyという3つのファイル(コントローラ)があるのでこれを変更。例えば、BookController.groovyは、
class BookController { def scaffold = true }
のように、def scaffold = trueだけにする。残りの2つのファイルも同様に変更する。
次にgrails-app/domainにBook.groovy、Author.groovy、Publisher.groovyという3つのファイル(ドメインクラス)があるのでこれを以下のように変更。
Book.groovy
import java.util.*; class Book { static belongsTo = [ Author, Publisher ]; static nullable = [ "published" ]; String isbn; String title; Author author; Publisher publisher; Date published; }
Author.groovy
class Author { static hasMany = [ books : Book ]; String name; }
Publisher.groovy
class Publisher { static hasMany = [ books : Book ]; String name; }
これでOK。コマンドラインから
grails run-app
で起動。http://localhost:8080/bookstore でアクセスしてみるとちゃんと動作している。
ただこのままだとBookの登録時にAuthorとかPublisherのプルダウンが「Author:1」とか、「Publisher:1」とかになってかっこ悪いなあ。
で、grails generate-views Book とかやってみる。できたビュー(grails-app/views/book/show.gspとか)をみてみると、こんな箇所が。
<g:link controller="publisher" action="show" id="${book?.publisher?.id}">${book?.publisher}</g:link>
むう、これはtoString()をいじってやれば良いと見た。で、Publisher.groovyとAuthor.groovyに入れてみる。Book.groovyでは、nameじゃなくてtitleをreturn。
String toString() { name }
これで、かっこよくなった。「同じ名前だとわからないだろ」とかは言っちゃダメ。