0

我想用我定义的类存储一些东西:

case class Contact(var name: String, var phone: Option[String],  val email: String)

object Contacts extends Table[Contact]("CONTACTS") {
  def email = column[String]("email", O.PrimaryKey)
  def name = column[String]("name")
  def phone = column[String]("phone", O.Nullable)

  def * =  name ~ phone ~ email <> (Contact.apply _, Contact.unapply _)
}

错误是:

[error]  cannot be applied to ((String, Option[String], String) =>
models.Contact, models.Contact => Option[(String, Option[String],
String)]) [error]   def * =  name ~ phone ~ email <> (Contact.apply _,
Contact.unapply _)

我知道如果我更改Table[Contact]Table[(String, String, String)],它将起作用。但我只想制作Contact一个表格,Contact 类可以为另一个类提供服务,就像Contact可以为User该类提供服务。

我应该如何实现这个?

4

2 回答 2

1

编译错误只是电话字段 ( Option[String]) 和电话列 ( String) 之间类型不匹配的结果。

正如@cvogt 建议的那样,您可以通过使用Option电话列来解决不匹配问题:

def phone = column[Option[String]]("phone")

或者,您可以更改*方法,以便在案例类的Option字段和表的Nullable列之间正确转换:

def * =  name ~ phone.? ~ email <> (Contact, Contact.unapply _)
于 2013-09-20T22:57:49.720 回答
1

对电话使用 Option 类型而不是 O.Nullable:

def phone = column[Option[String]]("phone")
于 2013-09-21T10:44:44.950 回答