Domanda

La domanda: come posso ottenere un record dal database dato un forse persistint64 (forse PrimaryKey)
Dall'interno di Amleto

Diciamo che ho una homepage.
Se una persona visita la mia homepage che ha effettuato l'accesso.
La persona sarà accolta con il suo nome e avrà la possibilità di disconnettersi.
Se una persona visita la mia homepage che non ha effettuato l'accesso.
Alla persona verrà chiesto di accedere.

Muid è un forse persist64
Voglio ottenere il record dell'utente all'interno del codice Amleto perché
Se qualcuno visita la home page che non è effettuato l'accesso causerà un errore
Se proviamo a recuperare un record con un nulla invece di un persist64

Quindi voglio solo recuperare un record da UserId AKA (da solo Muid)
Quando Muid non è niente e questo è nel blocco di codice di $ forse _ <- 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
|]
È stato utile?

Soluzione

Un modo per farlo sarebbe (spiegazione di seguito):

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

In questo modo, facciamo un utente forse su M e lo analizziamo nel nostro file modello. Notare il $maybe user <- m, questo (approssimativamente) si traduce in

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

Quindi è meglio non joilcard il tuo $maybe _ <- muid

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top