1

他の列に基づいてテーブルの列を更新しようとしていますが、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 に渡すことができるパラメーターは明確に定義されているため、この問題の原因は不明です。上記の問題を解決する方法を誰かに教えてもらえますか? 他の列に基づいて列を更新するより良い方法があれば、それも知りたいです。

ありがとう!

4

1 に答える 1