2016-08-20 6 views
0

私はサーバントでpersistent-postgresqlを使用しようとしています。永続的に `get`と` toSqlKey`を使用する

私はUserモデルを持っています。

IDを取得し、そのIDを持つユーザーを返すエンドポイントが必要です。

toSqlKeyを使用してInt64Keyに変換してgetにすることができます。私はselectListのエラーCouldn't match expected type ‘PersistEntityBackend (Entity User)’ with actual type ‘SqlBackend’

使用して正常に動作を取得コンパイルしようとする

oneUser :: Int64 -> App (Entity User) 
oneUser userId = do 
    maybeUser <- runDb $ get $ toSqlKey userId 
    case maybeUser of 
    Nothing -> 
     throwError err404 
    Just user -> 
     return user 

My機能は次のようになります。

allUsers :: App [Entity User] 
allUsers = runDb $ selectList [] [] 

私が間違っていることを教えてください、そして、私はこれのようなものを将来見なければならないところを教えてください。 this github projectから取ら

runDb :: (MonadReader Config m, MonadIO m) => SqlPersistT IO b -> m b 
runDb query = do 
    pool <- asks getPool 
    liftIO $ runSqlPool query pool 

:私は

runDbがどのように見えるstackageなどに/ hackage上のライブラリの正しいバージョンをgetを見つけることができませんでした。

答えて

2

違いはget ...は、プレーンUserないEntity User返すということですので、これは動作します:あなたはEntity Userを返すようにしたい場合は、

altSingleUser :: Int64 -> App User 
altSingleUser userid = do 
    let foo = get (toSqlKey userid) :: SqlPersistT IO (Maybe User) 
    maybeUser <- runDb $ foo 
    case maybeUser of 
     Nothing -> 
      throwError err404 
     Just person -> 
      return person 

ちょうど最後のreturn文を変更します。

return $ Entity { entityKey = toSqlKey userid, entityVal = person } 
+0

'let maybeUser = Nothing'はそこで何をしていますか?それはタイプミスですか? – leighman

+0

これは実験の残り物です:-)私はもう一度それをテストし、それはその行なしで動作します。 – ErikR

+0

ありがとうございます。エンティティデータコンストラクタは、私が探していたものです。 – leighman

関連する問題