1
我想使用Yesod web框架构建一个休息服务。我可以通过Id获取条目,但我无法通过唯一键获取它们。这是因为getBy404的类型签名与get404不同。 getBy404返回包裹在实体中的值,get404返回纯值。getBy404 vs get404
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)
我试图修改我的代码使用这个例子
Why does this code work with Yesod.Persist's get404 but not getBy404?
谢谢。我感谢您的帮助。
编辑
我觉得我越来越近
getMusicaUserR :: Int64 -> Handler Value
getMusicaUserR facebookId = do
user <- runDB $ getBy404 (UniqueFacebookId facebookId)
return $ object ["user" .= (user)]
我得到的错误,现在是
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。
要解决我需要改变我的路线定义,
上述错误/用户/#的Int64而不是/用户/ MusicaUserId
非常感谢@madjar。我想我已经接近了。还不够。 –
您在编辑时添加的错误看起来不像函数的问题。也许你的路由定义有问题:它应该是'/ something /#Int64'的形式,而不是'/ something /#MusicaUserId',因为路由函数需要Int64。 – madjar
非常感谢你!!!!!令人难以置信的是,路线是安全的。创建一个使用Int64创建一个facebookId类型的新类型会是一个好主意吗? –