2016-03-31 17 views
0

私はScalaの世界とPlay Frameworkを初めて使いました。私のスカラーモデルでは、私はGETメソッドに基づいてURLから値を取得することができます。いくつかの値は、単一の選択から来ており、他の値は複数の選択から来ています。単一の選択のために私は単一の値を取得する方法を知っていますが、複数選択から値を取得する方法は? :Scala:URLから複数の値を取得

私のURLは次のようになります。そして、?authorId=1&booksId=1,4,6&section=1

val params = request.queryString.map { case (k, v) => k -> v(0) } 

私は値を取得し、データベースにフェッチ:

...

(c.authorId === params.get("authorId ").?) and //from a single select : it works 
(c.booksId in params.get("booksId").?) and // from a multiple select : i dont know how since i cannot use a string ! 

params.get( "booksId")にはの私のリストが含まれていますids = 1,4,6

ステートメントのを使用して、データベース内のbooksIdを取得するにはどうすればよいですか?

PS:私はSquerylに

おかげ

+0

slickを使用していますか?あなたは単にselectの代わりにinを使ってみましたか? – raam86

+0

私はスクエリルを使用しています。私は試しました:(c.booksId in params.get( "booksId")。toString.split( "、")toList)しかし、うまくいきませんでした:( – user708683

+0

booksId paramsの出力を記録しました。 1,440)、おそらく私は仕事をしなかったのでしょうか? – user708683

答えて

1

params.getを使用していますが、params.get("booksId")の結果に直接文字列のメソッドを呼び出すことはできませんので、Option[String]を返します。代わりに、オプションにマップする必要があります。

params.get("booksId").map { booksId => 
    val bookIds = booksId.split(",").toList 
    c.booksId in bookIds 
} 

これはオプション[WhateverSquerylReturns]を返します。 Optionの値を取得するには、Option.getOrElseを参照してください。

+0

これはいいスタートのmsiebertですが、私の質問の中であなたの構文を使用することはできません:タイプミスマッチ、予想:logicalBoolean、acutal:Option [InclusionOperator]:c.authorId === params.get( "authorId")?)と(params.get( "booksId"))map {booksId => val bookIds = booksId.split( "、")。to bookIdsのc.booksId} – user708683

+0

authorIdクエリロジックをマップの本体に移動する必要があります。 – msiebert

関連する問題