首页 > 解决方案 > 即使定义了类型,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?

标签: haskellihp

解决方案


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"

推荐阅读