haskell - 即使定义了类型,IHP 中的 BadType 路由失败
问题描述
语境
我有一个类型为字段的记录Day
(对应DATE
于我的 Postgresql 数据库中的类型字段)。我有一个工作正常的创建操作(记录保存到数据库中)。但是,从 Create 操作中,如果我尝试重定向到另一个操作并传入以下类型的字段Day
:
-- PostsController.hs
action CreatePostAction = do
let post = newRecord @Post
post
|> buildPost
|> ifValid \case
Left post -> do
render NewView { .. }
Right post -> do
let date1 = get #date1 post
redirectTo SomeAction { .. }
我收到此错误:
Query parameter "date1" needs to be a "UUID" but got "2021-10-16"
Routing failed with: BadType {expectedType = "UUID", value = Just "2021-10-23", field = "date1"}
即使SomeAction
的参数类型是Day
:
-- Types.hs
data PostsController = SomeAction { date1 :: Day }
问题
为什么会抛出错误?为什么预期的 UUID 类型应该是 Day?
解决方案
IHP 的 AutoRoute 仅适用于以下数据类型:
- 文本
- [文本]
- 也许文本
- 诠释
- [诠释]
- 也许诠释
- ID
您可以在文档中找到更多详细信息:https ://ihp.digitallyducing.com/Guide/routing.html#parameter-types
我建议您将SomeAction { date1 :: Text }
其用作解决方法。您也可以SomeAction
在没有任何显式参数的情况下使用,然后使用param
如下方式访问日期:
action SomeAction = do
let date1 :: Day = param "date1"
推荐阅读
- amazon-elastic-beanstalk - 是否可以打开与 ebs linux 实例的终端会话?
- android - Unity 3D游戏实时更改屏幕方向导致触摸坐标错误
- python - Python - 计算列表列表中的出现次数
- python - 在 if then 语句中定义、加/减(彼此)、打印和定义变量
- apache - AH01630:客户端被服务器配置拒绝,但要求所有已设置(Apache 2.4,CentOs)
- vba - 运行时错误:Excel 宏 2016 中的“9”下标超出范围
- asp.net-core - 使用 OpenId 服务器的外部声明
- python - 使用 Windows 命令提示符或 PowerShell 在 Spyder 中运行脚本
- java - Hibernate 具有不同键类型的一对一映射
- javascript - C# 和 javascript 之间的 ECDH