試み
revelで以下のようなroutingを設定
POST /player/:id/delete Player.Delete
対応するアクション
// Delete delete one player
func (c Player) Delete(playerID int) revel.Result {
deletePlayer(playerID)
return c.Redirect(routes.Player.Index())
}
問題
revelに標準搭載されているテンプレート関数であるurl関数を利用してリバースルーティングを試みると以下のエラーが発生する。
{{range .players}}
...
<form action="{{url "Player.Delete" .ID}}" method="POST">
<button>DO</button>
</form>
...
{{end}}
↓
ERROR 09:44:22 revel router.go:708: Reverse: reverse route missing route argument section=router argument=id
*エラーは出るものの、意図した挙動は実現する
解決法
url関数を使いのをやめ、素直にURLを埋め込んだ
{{range .players}}
...
<form action="/player/{{.ID}}/delete" method="POST">
<button>DO</button>
</form>
...
{{end}}
アクション
func (c Player) Delete() revel.Result {
playerIDStr := c.Params.Get("id")
playerID, _ := strconv.Atoi(playerIDStr)
deletePlayer(playerID)
return c.Redirect(routes.Player.Index())
}