shiro-16.hatenablog.com
こちらの続き
modelを作成する
今回はmysqlを使用します。
今回作成したtableは下記です。
CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `name` varchar(20) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB;
modelを自動生成する。
$ kocha g model user create directory app/model create app/model/user.go create directory db create db/config.go
dbのconfigの変更
デフォルトではsqlite3の設定が記述してあるようです。
$ vi db/config.go - Driver: kocha.Getenv("KOCHA_DB_DRIVER", "sqlite3"), - DSN: kocha.Getenv("KOCHA_DB_DSN", filepath.Join("db", "db.sqlite3")) + Driver: kocha.Getenv("KOCHA_DB_DRIVER", "mysql"), + DSN: DSN: kocha.Getenv("KOCHA_DB_DSN", "user:password@/kocha"), // 各時の環境に合わせてuser名とpassword,db名を設定
modelを変更
$ vi app/model/user.go - Id int64 `db:"pk" json:"id"` + Id int64 + Name string
controllerを作成
$ kocha g controller users create app/controller/users.go create app/view/users.html
controllerを変更
$ vi app/controller/users.go func (us *Users) GET(c *kocha.Context) error { var users []model.User err := db.Get("default").Select(&users) if err != nil { return c.RenderError(500, nil, nil) } return c.Render(map[string]interface{}{ "ControllerName": "Users", "users": users, }) }
viewを変更
$ vi app/view/users.html <h1>This is Users</h1> <ul> {{ range $.users }} <li>{{ .Name }}</li> {{ end }} </ul>
動作確認
$ kocha run kocha: you can be setting for your app by the following environment variables at the time of launching the app: KOCHA_ADDR="127.0.0.1:9100" KOCHA_DB_DRIVER="mysql" KOCHA_DB_DSN="user:password@/kocha" Starting... Listening on 127.0.0.1:9100 Server PID: xxxx
上記が表示されたら前回同様http://127.0.0.1:9100/で「Welcome to Kocha」が表示され
http://localhost:9100/usersで「This is Users」 + 「user.nameのリスト」が表示されます。
Routingに関しての補足
routingに関してはcontrollerを作成したときに自動で追記されていました。
var routes = RouteTable{ { Name: "root", Path: "/", Controller: &controller.Root{}, }, { Name: "users", Path: "/users", Controller: &controller.Users{}, }, }
疑問 + その3に関して
1.Railsのshowとかその他get methodを追加したい場合とかは
各controllerのGETで処理を分岐させたりするのだろうか?
2.Migrationの機能もあるようなのでその辺の使い方
上記2点をその3で書ければいいかなと思っていますが、
その3に関しては未定です...mm