1

SecureSocial の Identity 特性を拡張する User クラスを使用して、Slick に Users テーブルを実装しています。オプションの not-storable-in-database タイプ オブジェクトからオプションのプリミティブ データベース タイプへの変換に問題があります。

参照するには: Slick docsSecureSocial docs (SecureSocial の API ドキュメントを生成するには、Githubからプルし、「module-code」ディレクトリに移動してから実行しますplay doc。次に、module-code/target/api フォルダーを調べて、上 index.html)

私が持っているもの

Userケース クラスで次のパラメーターを取得します。

oAuth1Info: Option[securesocial.core.OAuth1Info]

Scaladoc の OAuth1Info の新しいインスタンス コンストラクターは次のようになります。

new OAuth1Info(token: String, secret: String)

今私の*方法で(ここで説明されているように):

def * = stuffs ~ oAuth1InfoToken ~ oAuth1InfoToken ~ moreStuff <> 
    ( // the following is the apply method
    { t => User(stuffs, 
        Some(OAuth1Info( (t._9).getOrElse(""), (t._10).getOrElse("")) ), 
        moreStuffs)
    }, // the following is the unapply method
    {
        (r: User) => Some( (r.stuffs, 
            (r.oAuth1Info).getOrElse(None).token , // ERROR
            (r.oAuth1Info).getOrElse(None).secret , // ERROR
            r.moreStuffs) )
    }

私がやろうとしていること

提供されていないNone場合はデータベースに挿入し、oAuth1Info

Option[securesocial.core.OAuth1Info] = None

それ以外の場合は、OAuth1Infoオブジェクトを取得してトークンとシークレットを取得し、データベースのそれぞれの列に保存します。

このマッピングされたプロジェクションが 500 文字以上の行であることに加えて、何らかの操作を行う必要がありますか?

oAuth1Info match {
    case None: None
    case _: oAuth1Info.token
}

? 単一行のパターンマッチャーは可能ですか? 私はこの時点で自分のコードにとても迷っています...

助けてくれてありがとう


これまでの私の完全な実装を見たい場合は...

Scala + Slick + SecureSocial = 残念なことに tl;dr コード

このコードがテキストの壁であることはわかっています。複数行の Scala コードが存在する場合、ここで素晴らしいでしょうか? ペーストビン

4

2 に答える 2

1

元の質問の型を完全には把握していませんが、oAuth1Unapply回答のメソッドは次のように書き直すことができます

def oAuth1Unapply(smth: Option[securesocial.core.OAuth1Info]): (String, String) =
  smth.map(oa => (oa.token, oa.secret)).getOrElse(("",""))

mapメソッドは、Optionでない場合はの内容に関数を適用し、結果を値Noneとして返すか、そうでない場合は結果を のままにします。SomeNone

于 2013-07-01T04:21:06.950 に答える
0

私はばかだ。わかった。

だから私はパターンマッチャーを使用します。

def oAuth1Unapply(smth: Option[securesocial.core.OAuth1Info]): (String, String) =  {
    smth match {
          case None => ("", "")
          case _ => (smth.getOrElse(OAuth1Info("","")).token, smth.getOrElse(OAuth1Info("","")).secret)
        }
}

それから私はします

val oa1 = oAuth1Unapply(r.oAuth1Info)
def * = stuffs ~ oAuth1InfoToken ~ oAuth1InfoToken ~ moreStuff <> 
( // the following is the apply method
{ t => User(stuffs, 
    Some(OAuth1Info( (t._9).getOrElse(""), (t._10).getOrElse("")) ), 
    moreStuffs)
}, // the following is the unapply method
{
    (r: User) => Some( (r.stuffs, 
        oa1._1, oa2._2
        r.moreStuffs) )
}
于 2013-07-01T03:38:19.033 に答える