سؤال

السؤال: كيف يمكنني الحصول على سجل من قاعدة البيانات الممنوحة على ربما يستمر 64 (ربما PrimaryKey)
من داخل هاملت

دعنا نقول أن لدي صفحة منزلية.
إذا قام شخص بزيارة صفحتي الرئيسية التي تم تسجيل الدخول إليها.
سيتم الترحيب بالشخص باسمه ولديه خيار تسجيل الخروج.
إذا قام شخص بزيارة صفحتي الرئيسية التي لم يتم تسجيل دخولها.
سيُطلب من الشخص تسجيل الدخول.

Muid هو ربما يستمر 64
أريد الحصول على سجل المستخدم داخل رمز هاملت بسبب
إذا قام شخص ما بزيارة الصفحة الرئيسية التي لم يتم تسجيلها فيها ، فستؤدي ذلك إلى خطأ
إذا حاولنا جلب سجل بدون شيء بدلاً من الاستمرار 64

لذلك أريد فقط أن أحضر سجلًا من قِبل المستخدم الملقب (من Just 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

لذلك من الأفضل عدم عدم وجود بطاقة Wildcard الخاصة بك $maybe _ <- muid

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top