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