我想创建一个按ID删除项目并重定向到用户其他页面的函数。
deleteItemR :: ItemId -> Html
deleteItemR itemid = runDB $ delete itemid
redirect ItemR
我在其他方面尝试了很多次但是效果不好。
答案 0 :(得分:0)
您的代码应如下所示:
deleteItemR :: ItemId -> Handler Html
deleteItemR itemid = do
runDB $ get404 itemid
runDB $ delete itemid
setMessage . toHtml $ ("Item deleted" :: Text)
redirectUltDest ItemR
首先,您的功能签名不能是ItemID -> Html
,必须在Handler
中执行。
您还需要使用do
表示法来模拟Haskell中的一系列操作。
请注意,此类序列中的任何操作都可以结束执行。例如,runDB $ get404 itemid
将尝试获取itemid
引用的项目。如果它不存在,用户将被重定向到404页面(未找到)而不尝试执行其他操作。
我们需要runDB $ get404 itemid
操作,因为即使项目不存在,runDB $ delete itemid
操作也不会结束序列。因此,它表示项目已删除,但没有。