Play !:值“bars”不是“model.Foo”的成员..?

时间:2014-01-30 07:49:44

标签: scala playframework slick

Playframework的新功能。我在这里做错了什么?

非常感谢任何帮助。 THX

嗯,为什么投票失败?如果有一些我缺少的东西,你可以发表评论,以便我可以编辑它。只是想找到答案&在我得到答案之前,我的问题已经关闭了。


这是我的代码:

package model

case class Foo(id: Option[FooId],
                name: String) extends WithId[FooId]

object Foos extends IdTable[FooId, FOO]("FOOS") {

  def bars = Vector(Query(Bars).filter(_.fooId === id)) // Here is where "bars" is defined
}

这是我的观点:

@(foo: model.Foo)

@foo.name
<ul>
    @foo.bars { b =>
       <li>
         @b.id
       </li>
     }
</ul>

这是错误:

value bars is not a member of model.Foo

1 个答案:

答案 0 :(得分:2)

错误消息非常正确。 Foo对象没有bar成员。它们也不是采用{b =&gt; ......}关闭。

你可能想要做的是:

@(foo: model.Foo)

@foo.name
<ul>
    @{Query(model.Foos).filter(_.id === foo.id).flatMap(_.bars)}.foreach { b =>
       <li>
         @b.id
       </li>
     }
</ul>

请注意,您可能会遇到https://issues.scala-lang.org/browse/SI-3764,这会将自身显示为SlickException。要解决这个问题

class Bars extends IdTable[BarId, Bar]("BARS") {...}
val Bars = new Bars

而不是

object Bars extends IdTable[BarId, Bar]("BARS") {...}

你需要把val放在非顶级的地方。或者,您可以通过将表对象放在某个非静态位置(类或特征)来解决该错误。顺便说一句,Slick 2中不再触发该错误。