haskell-ja > Archives > 2012/05/11

2012/05/11 11:23:39 UTC[1..100]>>=pen
#
yesod の routes に関する質問です。
#
Rails では
/blogs GET => 一覧
/blogs POST => 新規作成
/blogs/ブログID番号 GET => 内容表示
とするのが標準なので、それを真似しようと config/routes を
/blogs               Blogs       GET
/blogs/new           NewBlog       POST
/blogs/#BlogId    Blog    GET
にしたら
    Exception when trying to run compile-time code:
      Overlapping routes: ("NewBlog","Blog")
というエラーになりました。
/blogs/new を例えば /blog/new だと通ります。
これは何が起きていてどうするのがよい(rails の真似をやめた方がよいとか)でしょうか。
#
ちなみに /blogs/new Blogs POST にすると Multiple declarations of `Foundation.Blogs' です。
2012/05/11 11:35:33 UTCcutsea110
#
BlogIdってModelのBlogに対して自動的に作られるIdのことですよね?newとは型が違うから区別できそうだけどな。なんか変わったのかな。
2012/05/11 17:12:43 UTC[1..100]>>=pen
#
上記の簡単な再現方法を書いておきます。yesod init したところに以下のパッチを当てて yesod devel してください。
#
--- config/models.org
+++ config/models
@@ -10,2 +10,5 @@
 
  -- By default this file is used in Model.hs (which is imported by Foundation.hs)
+
+Blog
+    subject Text
--- config/routes.org
+++ config/routes
@@ -6,2 +6,5 @@
 
 / HomeR GET POST
+
+/blogs/new NewBlogR POST
+/blogs/#BlogId BlogR GET
--- Handler/Home.hs.org
+++ Handler/Home.hs
@@ -38,2 +38,5 @@
     <$> fileAFormReq "Choose a file"
     <*> areq textField "What's on the file?" Nothing
+
+postNewBlogR = return ()
+getBlogR blogId = return ()