我想通过使用枚举来创建用户角色(认为这是最好的主意)。
我该如何处理?
我当前的代码如下所示:
object UserRole extends Enumeration {
type UserRole = Value
val admin, user, manager = Value
}
case class User(id: Long, firstname: String, lastname: String, password: String, email: String, role: UserRole)
那么我应该如何定义用户“简单”:
val simple = {
get[Long]("user.id") ~
get[String]("user.firstname") ~
get[String]("user.lastname") ~
get[String]("user.password") ~
get[String]("user.email") ~
get[UserRole]("user.role") map {
case id~firstname~lastname~password~email~role => User(id, firstname, lastname, password, email, role)
}
}
我应该如何将它保存到数据库?
CREATE TABLE user (
id integer NOT NULL DEFAULT nextval('user_id_seq'),
firstname varchar(60),
lastname varchar(60),
password varchar(255),
email varchar(60),
role varchar(40)
);
最佳答案
Anorm 不支持 Scala 枚举(在我看来,Scala 枚举非常糟糕)。我通常做的是创建另一个具有自己的解析器和表空间的案例类,并将其JOIN
到相关查询。 UserRole
可以在 User
中解析,方法是将其组合在 User.simple
中。
case class UserRole(id: Long, name: String)
object UserRole {
val simple: RowParser[UserRole] = {
get[Long]("roles.id") ~
get[String]("roles.name") map {
case id~name => UserRole(id, name)
}
}
}
case class User(id: Long, firstname: String, lastname: String, password: String, email: String, role: UserRole)
object User {
val simple: RowParser[User] = {
get[Long]("user.id") ~
get[String]("user.firstname") ~
get[String]("user.lastname") ~
get[String]("user.password") ~
get[String]("user.email") ~
UserRole.simple map {
case id~firstname~lastname~password~email~role =>
User(id, firstname, lastname, password, email, role)
}
}
}
关于scala - 如何使用 Anorm 管理 Scala 枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24213468/