Pregunta

La pregunta: ¿Cómo obtengo un registro de la base de datos dado un quizás persistint64 (quizás primario)
Desde el interior de Hamlet

Digamos que tengo una página de inicio.
Si una persona visita mi página de inicio, se registra.
La persona será bienvenida con su nombre y tiene la opción de cerrar sesión.
Si una persona visita mi página de inicio, que no registra.
Se le pedirá a la persona que inicie sesión.

Muid es quizás un persistint64
Quiero obtener el registro del usuario dentro del código Hamlet porque
Si alguien visita la página de inicio, que no registrala, causará un error
Si intentamos obtener un disco con una nada en lugar de un Persistint64

Así que solo quiero obtener un registro del UserID AKA (de Just Muid)
Cuando Muid no es nada y eso está en el bloque de código de $ tal vez _ <- 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
|]
¿Fue útil?

Solución

Una forma de hacerlo sería (explicación a continuación):

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
|]

De esta manera, hacemos un usuario quizás de M, y analizamos eso en nuestro archivo de plantilla. Observe la $maybe user <- m, esto (aproximadamente) se traduce en

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

Así que es mejor no comoduciar tu $maybe _ <- muid

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top