对于我的项目,我想制作一个树模型;假设它是关于文件和目录的。但是文件可以同时位于多个目录中,所以更像是在 gmail 中为电子邮件添加标签的方式。我想建立一个能力模型(比如java、scala、angular等)并将它们分类。在这种情况下,java 和 scala 是语言,agila 和 scrum 是工作方式,angular 是框架/工具包等等。但是我们想要灵活地对东西进行分组,即 play、java 和 scala 属于“后端”类别,而 angular、jquery 等属于前端类别。
我想我会有这样的表能力:
case class Competence (name: String, categories: Option[Category])
类别如下:
case class Category ( name: String, parent: Option[Category] )
这将编译,但 SORM 将生成错误(来自激活器控制台):
scala> import models.DB
import models.DB
scala> import models.Category
import models.Category
scala> import models.Competence
import models.Competence
scala> val cat1 = new Category ( "A", None )
cat1: models.Category = Category(A,None)
scala> val sav1 = DB.save ( cat1 )
sorm.Instance$ValidationException: Entity 'models.Category' recurses at 'models.Category'
at sorm.Instance$Initialization$$anonfun$2.apply(Instance.scala:216)
at sorm.Instance$Initialization$$anonfun$2.apply(Instance.scala:216)
at scala.Option.map(Option.scala:146)
at sorm.Instance$Initialization.<init>(Instance.scala:216)
at sorm.Instance.<init>(Instance.scala:38)
at models.DB$.<init>(DB.scala:5)
at models.DB$.<clinit>(DB.scala)
... 42 elided
虽然我想要 sorm 的美丽简洁,但我是否需要切换到 Slick 来让我的项目实现它?我的想法是链接表将由 sorm 隐式生成。或者我可以通过以下方式简单地解决这个问题:
case class Taxonomy ( child: Category, parent: Category )
然后在 JS 端进行解析/格式化工作?它似乎使使用 sorm 的简单性消失了一些。
给出一些想法,我想要的是制作一个 ajaxy 页面,用户可以在左侧的列表中添加新的能力,然后将它们链接/取消链接到他喜欢的树中的任何类别标签。