【问题标题】:Find userId in database based on email Yesod根据电子邮件 Yesod 在数据库中查找 userId
【发布时间】:2013-11-22 06:08:41
【问题描述】:

我的模型中有:

Email
    email Text
    user UserId Maybe
    verkey Text Maybe
    UniqueEmail email

我有一个表单,用户可以在其中输入(现有用户的)电子邮件和金额(int)。根据这封电子邮件,我想找到该用户的 UserId。我到目前为止:

paymentForm :: Form Payment
paymentForm = renderDivs $ Payment
    <$> lift (liftIO getCurrentTime)
    <*> pure userId
    <*> areq userIdField "To" Nothing
    <*> areq intField "Amount" Nothing
   where
    message :: Text
    message = "This user doesnt exist"
    userIdField = check hisUserId emailField
    hisUserId x | rawSql (SELECT user FROM "Email" WHERE "Email".email = x) == "" = Left message
                | otherwise = Right x

但这似乎不起作用。有什么想法吗?

【问题讨论】:

  • 我认为您使用了错误的表格,电子邮件存储在用户中

标签: sql forms haskell yesod


【解决方案1】:

rawSql 不会将单个值作为字符串返回。相反,您可以使用 Persistent 来实际查找电子邮件,然后再决定。

我不知道为什么您的 userId 是 Maybe。为什么您只有一个电子邮件 ID 而没有相应的用户 ID?无论如何,我将假设它是保持简单的必填字段。

类似的东西(未经测试):

 hisUserId :: Text -> Bool
 hisUserId email = do
     res  <- runDB $ selectList [EmailEmail ==. email] []
     user <- entityVal res
     case user of
          Just u ->  return True   
             -- if you really want to treat user as a Maybe then 
             -- you can get it using (emailUser u) and then check for its existence  
          Nothing -> return False

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 2010-10-06
    相关资源
    最近更新 更多