Reputation: 788
I'm having many problems to create the CRUD operation in a SubSite in Yesod, I have the following routes
mkYesodSubData "DemoCrud" [parseRoutes|
/demoNew DemoNewR GET POST
/demoEdit/#DemoId DemoEditR GET POST
|]
and the following subDispach instance
instance (Yesod master,RenderMessage master FormMessage, YesodPersist master, YesodPersistBackend master ~ SqlBackend)
=> YesodSubDispatch DemoCrud (HandlerT master IO)
where
yesodSubDispatch = $(mkYesodSubDispatch resourcesDemoCrud)
but have this error
Couldn't match expected type ‘DemoId
-> HandlerT DemoCrud (HandlerT parent1 IO) a0’
with actual type ‘HandlerT DemoCrud (HandlerT master0 IO) Html’
I was search but in the page example don't use Id in the routes
Upvotes: 1
Views: 114
Reputation: 788
Michael Snoyman are right, I had an error in postDemoEditR, so the following code is the correction
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>
|]
Upvotes: 1