我是斯卡拉的新手并且在我去的时候试图解决问题。我正在使用Play 2.x框架并使用Scala构建我的应用程序。我有一个定义的路线
GET /:tableName controllers.Application.getTable(tableName)
在控制器中,我想取表格的名称并像我一样使用它。例如,在db中有一个名为People的表。我希望它映射到具有getAll函数的People的Slick模型。我查看了typeof [t],但无法让它工作。下面是我想做的一个例子。
def getTable(tableName: String) = Action {
Ok(Json.toJson(typeOf[tableName].getAll))
}
答案 0 :(得分:2)
你需要更多的东西才能完成这项任务;)首先,Slick需要一个数据库会话,因此需要在某处进行处理。这意味着光滑表getAll
本身不起作用。
我会做这样的事情(抱歉,在没有IDE的情况下输入它,所以它可能无法编译):
case class Person(...)
object People extends Table[Person](PeopleDAO.table) {
def * = ...
}
trait DAO[T] {
val table: String
def getAll: Seq[T]
}
object PeopleDAO extends DAO[Person] {
override val table = "people"
def getAll = {
DB withSession { implicit session =>
Query(People).list
}
}
}
object Controller {
def getTable(tableName: String) = Action {
val dao: DAO[_] = tableName.toLowerCase match {
case PeopleDAO.table => PeopleDAO
case _ => throw new IllegalArgumentException("Not a valid table.")
}
Ok(Json.toJson(dao.getAll))
}
}