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