2013-10-27 4 views
9

Я ниже рекомендациями Slick documentation и я не понимаю, что я делаю неправильно здесь:Scala, Play Framework Slick вопрос - не может найти неявное значение для параметра 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] 
     } 
    } 

} 

Линия

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

дает мне это:

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] 

Что я здесь делаю неправильно?

Play Framework 2.2.0, 2.10.3 Scala, Slick 1.0.1

ответ

12

Вы должны обеспечить преобразование от результата к пользователю. Скопирована и адаптирована прямо из slick home:

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

this section Или из документации вы связаны

+1

Но где эта функция преобразования должна существовать? в классе пользователя? Внутри функции, выполняющей запрос? где-нибудь еще? На этот вопрос я никогда не видел ответа. Также каждый раз, когда я пытаюсь это сделать, я получаю ошибку «расходящегося неявного расширения». –

+0

@EricHartford. В моем примере я помещал его в объект 'Data' чуть ниже' case class User', не знаю, помогает ли это. Кроме того, посмотрите мои другие вопросы по одной и той же теме - у меня есть полдюжины из них. – Caballero

+1

На самом деле неважно, куда вы его положили, если это в сфере охвата. В некоторых случаях Scala автоматически импортирует имплициты, присутствующие в сопутствующих объектах, поэтому в объекте-компаньоне 'User' может быть хорошее место. – pedrofurla