routesに
GET /foo FooController.hoge GET /foo/bar FooController.hoge
って書くと、/foo にアクセスしても、 /foo/bar にアクセスしても、とりあえずはちゃんとFooControllerのhogeメソッドは呼ばれる。
なんで警告になるか考えてみて、
target/scala-2.10/src_managed/main/routes_reverseRouting.scala
というファイルを見たら以下のようになっていたので、多分これが原因
// @LINE:40 // @LINE:39 class ReverseFooController { // @LINE:40 // @LINE:39 def index(): Call = { () match { // @LINE:39 case () if true => Call("GET", _prefix + { _defaultPrefix } + "foo") // @LINE:40 case () if true => Call("GET", _prefix + { _defaultPrefix } + "foo/bar") } } }
何に使ってるのかはまだ調べてないが、routes_reverseRouting.scalaという名前の通り、
「URL => メソッド」
とは別に
「メソッド => URL」という逆の対応付けのScalaコードのファイル
が裏で生成されているわけだが、こいつがこういう場合を考慮していないので、ここで警告が出る。なおかつ、以下のようなSourceMappingという仕組み
そして、Play2.1だと URL PlayPositionMapperという、scala templateやroutesがコンパイルエラーになった場合に、わかりやすく元ファイルの行の情報などをsbtのlogに吐く仕組みが追加されてるみたいだが
2013-02-02 17:52:42 via web
このコメントなんだろう?と思ったら URL Playの人がpull reqして、sbt0.13から「Scalaファイルを生成した場合の行番号のマッピング」をできるようにするための仕組み追加されてるのか URL
2013-02-02 17:58:41 via web
があるので
「生成後のファイルではなく、もとのroutesのファイルの行番号のみ表示されるのでわかりにくい!」という現象がおきているんだと思う。
routes_reverseRouting.scalaが何に使われているのか?とか、その他詳しくことわかったら追記するか、別に書くコメントもらったので、それ読みましょう!