2015-05-04 2 views
0

Я хотел бы сделать функцию, которая удаляет элемент по id и перенаправляет пользователю другую страницу.Как удалить элемент по id и перенаправить?

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

Я пытался так много раз в других отношениях, но он не работает, как хорошо.

ответ

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 не завершит последовательность, даже если элемент не существует. Поэтому он указывает, что элемент был удален, хотя его не было.