他の列に基づいてテーブルの列を更新しようとしていますが、updateWhere 関数では実行できないようです。そこで、rawSQl を使用しようとしましたが、あいまいな型エラーのために機能しません。
getCalculateDeltaR :: personId -> Handler Html
getCalculateDeltaR personId = do
goods <- runDB $ selectList [GoodPerson ==. personId] []
forM goods $ \(Entity gid good) -> do
let aid = goodAsset good
asset <- runDB $ get404 aid
let mktValue = assetMktValue asset
runDB $ rawSql "UPDATE good SET delta = (? - orig_value) \
WHERE person = ? AND asset = ?"
[toPersistValue mktValue, toPersistValue personId, toPersistValue aid]
defaultLayout $ do
$(widgetFile "calculateDelta")
次のエラーが表示され、追加しようとしましたか?? UPDATEの後ですが、違いはありませんでした。
Ambiguous type variable `a0' in the constraint:
(RawSql a0) arising from a use of `rawSql'
Probable fix: add a type signature that fixes these type variable(s)
In the second argument of `($)', namely
`rawSql
...
...
rawSQL に渡すことができるパラメーターは明確に定義されているため、この問題の原因は不明です。上記の問題を解決する方法を誰かに教えてもらえますか? 他の列に基づいて列を更新するより良い方法があれば、それも知りたいです。
ありがとう!