2016-05-04 10 views
1

私はScala 2.10でSlick 2.1.0を使用しています。 VARCHARの列にマップする値オブジェクト(EMail)があります。値オブジェクトを使用したSlick select(AnyValを拡張)

object EMail { 
    import java.util.regex.Pattern 
    val emailRegex = Pattern.compile("^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE) 

    val empty = EMail("[email protected]") 
} 

case class EMail(value: String) extends AnyVal with MappedTo[String] { 
    def isValid: Boolean = EMail.emailRegex.matcher(value).find 

    def validate: EMail = { 
    assert(isValid) 
    EMail(value.trim.toLowerCase) 
    } 

    override def toString = validate.value 
} 

Column定義は次のとおりです。

def email = column[Option[EMail]]("email_address") 

これは、ファインダーを書くことで私の試みです:

def findByEmail(email: Option[EMail]): Option[User] = 
    database.withSession { implicit session: Session => 
    queryAll.filter(e => e.email.isDefined && e.email === email).firstOption 
    } 

これは私が取得エラーメッセージです:

[error] Users.scala:52: ambiguous implicit values: [error] both value BooleanCanBeQueryCondition in object CanBeQueryCondition of type => scala.slick.lifted.CanBeQueryCondition[Boolean] [error] and value BooleanOptionColumnCanBeQueryCondition in object CanBeQueryCondition of type => scala.slick.lifted.CanBeQueryCondition[scala.slick.lifted.Column[Option[Boolean]]] [error] match expected type scala.slick.lifted.CanBeQueryCondition[Nothing] [error] queryAll.filter(_.email === email.map(_.value)).firstOption [error] ^

答えて

1

あなたの方法にOption[EMail]を渡す必要はありません、あなたは単純に作ることができます:

def findByEmail(email: EMail): Option[User] = { 
    database.withSession { implicit session => 
    queryAll.filter(_.email === email).firstOption 
    } 
} 

あなたが本当に入力パラメータとしてOption[EMail]]が必要な場合は、以下試してみてください:

def findByEmail(emailOpt: Option[EMail]): Option[User] = { 
    emailOpt.flatMap { email => 
    database.withSession { implicit session => 
     queryAll.filter(_.email === email).firstOption 
    } 
    } 
} 
+0

Iあなたが正しいことを発見しました。 https://github.com/mslinn/slick_2.1.0_mappings/blob/master/src/main/scala/App.scala私はこの投稿を削除すると思っていた –

関連する問題