Есод как получить запись из хутора
Вопрос: как мне получить запись из базы данных с данными 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