문제

질문 : persistint64 (아마도 1 차 키)가 주어진 데이터베이스에서 레코드를 얻는 방법
내부 햄릿에서

홈페이지가 있다고 가정 해 봅시다.
로그인 한 사람이 내 홈페이지를 방문한 경우.
그 사람은 그의 이름으로 환영 받고 로그 아웃 할 수있는 옵션이 있습니다.
로그인하지 않은 사람이 내 홈페이지를 방문한 경우.
그 사람은 로그인하도록 요청받습니다.

Muid는 아마도 persistint64 일 것입니다
햄릿 코드 내부에서 사용자의 레코드를 얻고 싶습니다.
로그인하지 않은 홈페이지를 방문하면 오류가 발생합니다.
우리가 peristint64 대신 아무것도없는 레코드를 가져 오려고한다면

그래서 나는 userid aka의 레코드 만 가져오고 싶다 (Fromjust Muid)
muid가 아무것도 아니고 그것은 $ _ <- 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
|]
도움이 되었습니까?

해결책

한 가지 방법은 (아래 설명)입니다.

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top