2017-04-18 6 views
0

私はそれを作るようにしているので、あるモデルから別のモデルの作成に価値を得ることができます。これは非常に単純化されていますが、私はモデルインスタンスをスカラーイルモデルに拡張しています。実際には、このモデルに固有の計算を行っていますが、別のモデルからの値が必要です。"見つからない: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)と入れ替えれば動作します。ありがとうございました! –

関連する問題