2013-10-27 24 views
9

Mam następujący wytycznymi Slick documentation i nie rozumiem, co robię źle tutaj:Scala, Play Framework Slick problem - nie mógł znaleźć ukrytą wartość parametru rconv

package models 

import scala.slick.session.Database 
import Database.threadLocalSession 
import scala.slick.jdbc.{GetResult, StaticQuery => Q} 
import javax.sql.DataSource 
import Q.interpolation 

object Data { 

    case class User(user: String, password: String) 

    lazy val db = Database.forName("default") 

    def result: Option[User] = { 
     db.withSession { 
      sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User] 
     } 
    } 

} 

Linia

sql"SELECT user, password FROM user WHERE user = 'user' AND password = 'pass'".as[User] 

daje mi to:

Multiple markers at this line 
    - could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[models.Data.User] 
    - could not find implicit value for parameter rconv: scala.slick.jdbc.GetResult[models.Data.User] 

Co robię źle tutaj?

play Framework 2.2.0, 2.10.3 Scala, Slick 1.0.1

Odpowiedz

12

Musisz podać funkcję konwersji od wyniku do użytkownika. Kopiowane i przystosowane prosto z slick home:

implicit val getUserResult = GetResult(r => User(r.<<, r.<<)) 

Or this section z dokumentacji, którą powiązana

+1

Ale gdzie ta funkcja konwersji powinien istnieć? w klasie użytkownika? W ramach funkcji, która wykonuje zapytanie? gdzieś indziej? Na to pytanie nigdy nie widziałem odpowiedzi. Za każdym razem, gdy próbuję tego, pojawia się błąd "rozbieżnego niejawnego rozszerzenia" –

+0

@EricHartford W moim przykładzie umieściłem go wewnątrz obiektu 'Data' tuż poniżej' case class User', nie wiem, czy to pomaga. Przyjrzyj się także innym moim pytaniom dotyczącym tego samego tematu - mam ich już kilkadziesiąt. – Caballero

+1

Nie ma znaczenia, gdzie to umieścisz, o ile jest w zasięgu. W niektórych okolicznościach Scala automatycznie importuje implicity obecne w obiektach towarzyszących, więc w obiekcie towarzyszącym "Użytkownik" może być dobrym miejscem. – pedrofurla