【问题标题】:create edit operation in a Yesod SubSite在 Yesod SubSite 中创建编辑操作
【发布时间】:2015-08-13 11:35:10
【问题描述】:

我在 Yesod 的子站点中创建 CRUD 操作时遇到很多问题,我有以下路线

mkYesodSubData "DemoCrud" [parseRoutes|
/demoNew DemoNewR GET POST
/demoEdit/#DemoId DemoEditR GET POST
|]

和下面的 subDispach 实例

instance (Yesod master,RenderMessage master FormMessage, YesodPersist master, YesodPersistBackend master ~ SqlBackend) 
  => YesodSubDispatch DemoCrud (HandlerT master IO) 
  where
 yesodSubDispatch = $(mkYesodSubDispatch resourcesDemoCrud)

但是有这个错误

Couldn't match expected type ‘DemoId
                              -> HandlerT DemoCrud (HandlerT parent1 IO) a0’
            with actual type ‘HandlerT DemoCrud (HandlerT master0 IO) Html’

我正在搜索,但在页面示例中不要在路线中使用 Id

【问题讨论】:

  • 也许有人有一个子站点中 Crud 操作的完整示例,可以帮助我很多
  • 从提供的信息中很难判断,但我猜你在getDemoEditRpostDemoEditR 上的类型签名错误。
  • 谢谢你,你是对的我在 postDemoEditR 中有错误,

标签: haskell yesod


【解决方案1】:

Michael Snoyman 是对的,我在 postDemoEditR 中有错误,所以下面的代码是更正

getDemoEditR :: YesodPersist master
         => YesodPersistBackend master ~ SqlBackend 
         => (Yesod master,RenderMessage master FormMessage) 
         => DemoId -> HandlerT DemoCrud (HandlerT master IO) Html 
getDemoEditR  demoId =  do
           demo <- lift $ runDB $ get404 demoId  
           (widget, encoding) <- lift $ generateFormPost $ renderBootstrap3 BootstrapBasicForm $ demoForm  (Just demo)
           lift $ defaultLayout $ do     
               [whamlet|
                    <form method=post>
                          ^{widget}
                          <div>
                                <input type=submit>
                        |]  

 postDemoEditR :: YesodPersist master
          => YesodPersistBackend master ~ SqlBackend 
          => (Yesod master,RenderMessage master FormMessage) 
          => DemoId -> HandlerT DemoCrud (HandlerT master IO) Html
postDemoEditR demoId  = do
            demo <- lift $  runDB $ get404 demoId
            ((result,widget), encoding) <- lift $ runFormPost $ renderBootstrap3 BootstrapBasicForm $ demoForm  (Just demo)
            case result of
                 FormSuccess demoResult -> do 
                             _ <- lift $ runDB $ replace demoId  demoResult
                             redirect DemoNewR 
                 _ -> lift $  defaultLayout $ do     
                        [whamlet|
                              <form method=post>
                                    ^{widget}
                                    <div>
                                          <input type=submit>
                        |]  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-29
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多