首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getBy404对get404

getBy404对get404
EN

Stack Overflow用户
提问于 2015-10-18 12:27:42
回答 1查看 201关注 0票数 1

我正在尝试使用Yesod web框架构建rest服务。我可以通过Id获取条目,但不能通过唯一的键获取它们。这是因为getBy404的类型签名不同于get404。getBy404返回包装在实体中的值,get404返回纯值。

代码语言:javascript
复制
module Handler.MusicaUser where
import Import

getMusicaUserR :: MusicaUserId -> Handler Value
getMusicaUserR pid = do
post <- runDB $ get404 pid

    return $ object ["user" .= (Entity pid post)]

putMusicaUserR :: MusicaUserId -> Handler Value
putMusicaUserR pid = do
    post <- requireJsonBody :: Handler MusicaUser

    runDB $ replace pid post

    sendResponseStatus status200 ("UPDATED" :: Text)

deleteMusicaUserR :: MusicaUserId -> Handler Value
deleteMusicaUserR pid = do
    runDB $ delete pid

    sendResponseStatus status200 ("DELETED" :: Text)

我已经尝试用这个例子修改我的代码。

为什么这段代码适用于Yesod.Persister的get404而不是getBy404?

谢谢。谢谢你的帮助。

编辑

我想我越来越近了

代码语言:javascript
复制
getMusicaUserR :: Int64 -> Handler Value
getMusicaUserR facebookId = do
   user <- runDB $ getBy404 (UniqueFacebookId facebookId)
   return $ object ["user" .= (user)]

我现在所犯的错误是

代码语言:javascript
复制
Application.hs:41:1:
    Couldn't match type ‘Int64’ with ‘Key MusicaUser’
    Expected type: MusicaUserId
      Actual type: Int64
    In the first argument of ‘MusicaUserR’, namely ‘dyn_al6K’
    In the first argument of ‘Just’, namely ‘MusicaUserR dyn_al6K’

Int64是我的函数的正确类型。我之所以使用它,是因为facebookId是如何在我的模型中定义的。我也尝试过使用UniqueFacebookId。

要修复上述错误,我需要将路由定义更改为

/user/#Int64 64而不是/user/MusicaUserId

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 09:57:12

当您查看实体的定义时,您可以看到它只是一个实体的容器,它是键。您可以使用两个函数entityKeyentityValgetBy404的返回值中提取键和值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33197918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档