Есод как получить запись из хутора

Вопрос: как мне получить запись из базы данных с данными Maybe PersistInt64 (может быть primaryKey)
изнутри деревня

допустим, у меня есть домашняя страница.
Если на мою домашнюю страницу заходит кто-то, кто залогинен.
Человек будет приветствоваться с его именем и имеет возможность выйти из системы.
Если на мою домашнюю страницу заходит человек, который не вошел в систему.
Человеку будет предложено войти.

muid - это, возможно, PersistInt64
Я хочу получить запись пользователя внутри кода Гамлета, потому что
если кто-то заходит на домашнюю страницу, но не вошел в систему, это вызовет ошибку
если мы попытаемся получить запись с ничем вместо PersistInt64

так что я хочу только получить запись с помощью userId aka (fromJust muid)
когда muid не является ничем, и это находится в блоке кода $ Maybe _ <- 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
|]

1 ответ

Решение

Один из способов сделать это (объяснение ниже):

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

Таким образом, мы создаем Maybe User из m и анализируем это в нашем файле шаблона. Обратите внимание на $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

Другие вопросы по тегам