如何使用我的 Persistent 模型中的字段作为我的路由文件中的路径片段?

How can I use a field from my Persistent model as a path piece in my routes file?

我有一个像这样的持久模型:

Organization sql=organizations
    Id UUID default=uuid_generate_v1mc
    name Text
    UniqueOrganizationName name
    deriving Show Eq Typeable

我想在我的 Yesod routes 文件中使用组织名称,如下所示:

/#OrganizationName/onboarding/business/about OnboardingBusinessAboutR POST

使用 OrganizationNameUniqueOrganizationName 给我这个错误:

/Users/maximiliantagher/Documents/Mercury/hs/mercury-web-backend/src/Foundation.hs:41:1: error:
    • Data constructor ‘OrganizationName’ cannot be used here
        (Perhaps you intended to use TypeInType)
    • In the type ‘OrganizationName’
      In the definition of data constructor ‘OnboardingBusinessAboutR’
      In the data instance declaration for ‘Route’

我可以使用新类型作为解决方法,只是想知道是否有必要。

我认为缺少 PathPiece 实例是个问题,但如果只是这样,那么错误将是 No instance for (PathPiece ...).

使用 OrganizationNameUniqueOrganizationName 都可以。

OrganizationName 类型是一个构造函数,因为这是在像 selectList 这样的持久性机器中使用的。实际上,name 是类型 TextOrganization 构造函数的参数,因此您只需要在路由中使用 #Text