Redirect 如何按id删除项目并重定向?

Redirect 如何按id删除项目并重定向?,redirect,yesod,Redirect,Yesod,我想做一个功能,删除一个项目的id和重定向到用户的其他页面 deleteItemR::ItemId->Html deleteItemR itemid=runDB$delete itemid 重定向项目r 我用其他方法尝试了很多次,但效果并不理想。您的代码应该如下所示: deleteItemR :: ItemId -> Handler Html deleteItemR itemid = do runDB $ get404 itemid runDB $ delete itemi

我想做一个功能,删除一个项目的id和重定向到用户的其他页面

deleteItemR::ItemId->Html
deleteItemR itemid=runDB$delete itemid
重定向项目r


我用其他方法尝试了很多次,但效果并不理想。

您的代码应该如下所示:

deleteItemR :: ItemId -> Handler Html
deleteItemR itemid = do
    runDB $ get404 itemid
    runDB $ delete itemid
    setMessage . toHtml $ ("Item deleted" :: Text)
    redirectUltDest ItemR
首先,函数签名不能是
ItemID->Html
,必须在
处理程序中执行

您还需要使用
do
符号来模拟Haskell中的一系列操作

请注意,这样一个序列中的任何操作都可以结束执行。例如,
runDB$get404 itemid
将尝试获取
itemid
引用的项。如果不存在,用户将被重定向到404页面(未找到),而不尝试执行其他操作

我们需要
runDB$get404 itemid
操作,因为
runDB$delete itemid
操作即使项目不存在也不会结束序列。因此,它将表明一个项目已被删除,尽管没有