LoginSignup
0
0

More than 5 years have passed since last update.

revelのテンプレート関数を使ってアクションへIDを返そうとするとReverse: reverse route missing route argumentが発生する問題

Posted at

試み


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())
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0