0


问题:我如何从数据库中获取记录,给定来自 hamlet 内部的 Maybe PersistInt64(可能是 primaryKey)

假设我有一个主页。
如果有人访问我已登录的主页。
该人将受到欢迎,并可以选择退出。
如果有人访问我的主页,但未登录。
该人将被要求登录。

muid 可能是 PersistInt64
我想在 hamlet 代码中获取用户的记录,因为如果有人访问未登录的主页, 如果我们尝试获取没有任何内容而不是 PersistInt64 的记录
,则会导致错误, 所以我只想要 当 muid 不是空的并且在 $maybe _ <- muid 的代码块中时,通过 userId aka (fromJust muid) 获取记录



getHomeR :: Handler Html
getHomeR = do
    muid <- maybeAuthId
    defaultLayout $ do
        [whamlet|
            <p>Welcome!
        $maybe _ <- muid
            <p>
                $with user <- fromJust (runDB $ get (fromJust muid)) 'does not work'        
                Welcome #{userIdent user}<br>
                <a href=@{AuthR LogoutR}>Logout
        $nothing
            <p>
                <a href=@{AuthR LoginR}>Go to the login page
|]
4

1 回答 1

3

一种方法是(下面的解释):

getHomeR :: Handler Html
getHomeR = do
    muid <- maybeAuthId
    m <- case muid of
        Nothing -> return Nothing
        Just i  -> runDB $ get i

    defaultLayout $ do
        [whamlet|
            <p>Welcome!
        $maybe user <- m
            <p>        
                Welcome #{userIdent user}<br>
                <a href=@{AuthR LogoutR}>Logout
        $nothing
            <p>
                <a href=@{AuthR LoginR}>Go to the login page
|]

这样,我们从 m 中创建了一个 Maybe User,并在我们的模板文件中解析它。注意$maybe user <- m,这(大致)转换为

case m of
    Just user -> do
        -- Do stuff with user, which is now of type User (and not Maybe User)
    Nothing -> do
        --Do stuff if m was nothing

所以最好不要使用通配符$maybe _ <- muid

于 2013-11-07T12:53:50.900 回答