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

时间:2015-05-04 20:09:54

标签: redirect yesod

我想创建一个按ID删除项目并重定向到用户其他页面的函数。

deleteItemR :: ItemId -> Html deleteItemR itemid = runDB $ delete itemid redirect ItemR

我在其他方面尝试了很多次但是效果不好。

1 个答案:

答案 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操作也不会结束序列。因此,它表示项目已删除,但没有。