Haskell 持久的';t匹配预期类型‘;键表’;使用实际类型文本
我不知道这对你来说真的是个问题,但对我来说是个大问题。 我有一个用html创建的表单,其中一个字段将保存城市列表(它是一个选择标记),因此该选项的值包含Haskell 持久的';t匹配预期类型‘;键表’;使用实际类型文本,haskell,yesod,persistent,Haskell,Yesod,Persistent,我不知道这对你来说真的是个问题,但对我来说是个大问题。 我有一个用html创建的表单,其中一个字段将保存城市列表(它是一个选择标记),因此该选项的值包含city\u id 在我的帖子处理程序中,它将如下所示: postPriceR :: Handler Html postPriceR = do now <- liftIO getCurrentTime city <- runInputPost $ ireq textField "city" amount &
city\u id
在我的帖子处理程序中,它将如下所示:
postPriceR :: Handler Html
postPriceR = do
now <- liftIO getCurrentTime
city <- runInputPost $ ireq textField "city"
amount <- runInputPost $ ireq textField "amount"
runDB $ insert $ Prices city 100.0 now Nothing
redirect PriceR
给我一个警告:
Couldn't match expected type ‘Key Cities’ with actual type Text …
希望你能帮助我。谢谢。我使用@CarstenKönig help解决了这个问题。使用 这是:
导入数据.Int
runDB $ insert $ Prices (toSqlKey (read (unpack city) :: Int64 ) ) 100.0 now Nothing
谢谢大家的帮助。问题是,
persistent
不知道如何将文本
转换到数据库密钥中-假设您有某种SQL存储,通常的解决方案是使用@BitTickler look,这里刚刚提到-如果您在YesO中对函数命名有问题,您应该转到他们的github页面并在那里打开一个问题-在这里您只需trolling@CarstenKönig-你能给我一个片段吗?谢谢,这有点棘手,因为我无法编译/检查您的代码-而是在runDB$insert$Prices city…
中使用city'
,就像let city'=toSqlKey一样。阅读解包$city
-您可能需要导入toSqlKey
和unpack
,或者最好使用intField
,然后可以删除读取。打开包装
东西!差不多;)-我很好
runDB $ insert $ Prices (toSqlKey (read (unpack city) :: Int64 ) ) 100.0 now Nothing