2016-03-31 11 views
0

Scala dünyasına ve Play Framework'e yeniyim. Benim scala modelimde, bir GET yöntemine dayanan bir url'den değerler alabiliyorum. Bazı değerler tek bir seçimden ve çoklu seçimlerden gelenlerden gelir. Tek seçim için, tek bir değerin nasıl alınacağını biliyorum, ancak çoklu seçimden değerleri nasıl alacağım? :Scala: bir URL'den mutliple değerlerini al

Benim url şöyle görünür: Sonra ?authorId=1&booksId=1,4,6&section=1

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

i değerleri almak ve bir veritabanında bir şekilde alın:

...

(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")listem listemi = 1,4,6

ifadesinde kodunu kullanarak dataBase kitaplığımdaki kitapları nasıl alabilirim?

PS: Ben Squeryl

Teşekkür

Eğer params.get("booksId") sonucuna doğrudan String yöntemlerini diyemezsin böylece
+0

Slick kullanıyor musunuz? Seçimi yerine kullanmayı denediniz mi? – raam86

+0

Ben squeryl kullanıyorum. Denedim: (params.get ("booksId") içinde c.booksId. ToString.split (","). ToList) ama çalışmadı :( – user708683

+0

booksId params çıktısını kaydettim ve bazı: 1,4,6), belki de bu yüzden işe yaramadı mı? – user708683

cevap

1

params.get, bir Option[String] döndürür kullanıyorum. Bunun yerine, Opsiyonu'ndaki haritasına gerekir:

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

Bu

Birini [WhateverSquerylReturns] dönecektir. Eğer tanımlanmışsa Option değerini almak için bkz. Option.getOrElse.

+0

Bu iyi bir başlangıç ​​msiebert ama yazımından itibaren söz dizimini kullanamıyorum çünkü yazıyor: Type mismatch, beklenen: logicalBoolean, acutal: Option [InclusionOperator]: c.authorId === params.get ("authorId").?) ve (params.get ("booksId") harita {booksId => val bookIds = booksId.split (","). toList c.booksId bookIds}) – user708683

+0

authorId sorgu mantığınızı haritanın gövdesine de taşımalısınız. – msiebert