2017-04-18 67 views
0

我试图让它可以从一个模型中获得一个值,并创建另一个模型。这是非常简单的,但给我与模型实例扩展squeryl模型的错误。实际上,我正在做一些特定于此模型的计算,但需要来自其他模型的值。“not found:value account”在使用squeryl和Scala时

我得到一个错误,做各种的这个版本:

class Bar(
    val bazId: String 
    val someValue: String 
) extends db.BaseModel { 
    val foo: Foo = db.MyDb.foos.lookup(bazId).head 

    def this(
    bazId: Baz 
) = { 
    this (
     Baz.id, 
     foo.someValue, 
    ) 
    } 

的错误是:

not found: value foo 
[error]  foo.someValue, 
      ^

我试过有某些查询的对象/单,在def this()(这给出了“应用程序不接受参数”错误)和其他内容,但没有任何工作。看起来很简单,但根本没有运气。

回答

2

问题是你试图在构造函数中访问类的成员,并且因为这是在构造对象之前 - 它不可访问。在伴侣中这样做可以帮助你解决这个问题。喜欢的东西:

object Bar { 
    val foo(bazId:String): Foo = db.MyDb.foos.lookup(bazId).head 
} 

class Bar(
    val bazId: String, 
    val someValue: String 
) extends db.BaseModel { 
    val foo: Foo = Bar.foo(bazId) 

    def this(
    bazId: String 
) = { 
    this (
     bazId, 
     Bar.foo(bazId).someValue 
    ) 
    } 
} 

或者,如果你没打算有构造函数接受类Baz,那么你也可以直接在Baz添加查阅方法 - 那么你可以把它直接查找Foo

+0

我想就是这样!我尝试了这个对象,但由于某种原因,我以为你用'this'来访问它,所以this.foo(bazId)'。与Bar.foo(bazId)交换并且工作。谢谢! –