Yesod 坚持从 JSON 创建字符串键
Yesod Persist create String key from JSON
我有两个非常简单的模型定义:
Page json
uuid Text
title Text
UniquePageUuid uuid
Primary uuid
Link
uuid Text
href Text
pageId PageId Maybe
Primary uuid
我想构建一个 JSON 端点来更新 Link 模型中的 pageId:
data ApiLink { linkPageId :: PageId } deriving (Generic)
instance FromJSON ApiLink
我的处理程序看起来像这样:
patchApiLinkR :: LinkId -> Handler Value
patchApiLinkR linkId = do
jsonData <- requireJsonBody :: Handler ApiLink
link <- runDB $ update linkId [LinkPageId =. (linkPageId jsonData)]
returnJson link
不幸的是,我不知道如何进行这项工作,因为 ApiLink 中的 linkPageId 具有 PageId 类型。我看过一些为 Int64 创建数据库密钥的代码,但我不知道如何从文本值创建它们。
非常感谢!
您必须稍微更改您的数据库查询,如下所示:
link <- runDB $ update linkId [LinkPageId =. (Just $ linkPageId jsonData)]
我有两个非常简单的模型定义:
Page json
uuid Text
title Text
UniquePageUuid uuid
Primary uuid
Link
uuid Text
href Text
pageId PageId Maybe
Primary uuid
我想构建一个 JSON 端点来更新 Link 模型中的 pageId:
data ApiLink { linkPageId :: PageId } deriving (Generic)
instance FromJSON ApiLink
我的处理程序看起来像这样:
patchApiLinkR :: LinkId -> Handler Value
patchApiLinkR linkId = do
jsonData <- requireJsonBody :: Handler ApiLink
link <- runDB $ update linkId [LinkPageId =. (linkPageId jsonData)]
returnJson link
不幸的是,我不知道如何进行这项工作,因为 ApiLink 中的 linkPageId 具有 PageId 类型。我看过一些为 Int64 创建数据库密钥的代码,但我不知道如何从文本值创建它们。
非常感谢!
您必须稍微更改您的数据库查询,如下所示:
link <- runDB $ update linkId [LinkPageId =. (Just $ linkPageId jsonData)]