2011-06-21 4 views
2

をコンパイルすることはできません(「ユーザー」)を使用してマジック[ユーザー]を()拡張:対象ユーザーは、私は、ユーザーのケースクラスに別のテーブル名を使用したいAnormを使用する場合は

object User extends Magic[User]().using("users") 

しかし、私は取得しますコンパイルエラー:

ファイル/app/models/User.scalaをコンパイルできませんでした。エラーが発生しました: ';'期待されていたが。見つかりました。

対象ユーザーは、MagicUser↓.using( "ユーザー")を拡張

これはAnormのバグですか?

答えて

4

明らかにバグではなく、コードは有効なスカラではありません。

lazy val User = new Magic[User].using("users") 

(規則は小文字の「ユーザー」になり、資本それはあなたの意図したコードと同等になるように、左)

オブジェクトの宣言、ない表現です:あなたは代わりにそれを行うことができます。オブジェクト宣言は、

object ObjectName extends Ancestor(ancestor_constructor_arguments) { 
    // body: data, method and initialization code 
} 

ほとんどの部分はオプションです。

オブジェクトの本体にコンストラクタ引数または初期化コードのいずれかを使用してアダプテーションを実行する必要があります。

Magicクラスに動作を追加しないので、とにかくオブジェクトを宣言する必要はないようです。

+0

恐らくplay scalaのドキュメントhttp://scala.playframework.org/documentation/scala-0.9.1/anorm#AddingsomeMagicTにエラーがあります。しかし、私のUserオブジェクトは、CaseクラスUserのコンパニオンオブジェクトでなければなりません。それ以外の場合は、lazy valユーザーはパッケージオブジェクトに入れなければなりませんか?それ以上の洗練されたソリューションはありますか? –

+2

オブジェクトである必要がある場合は、コンストラクタまたは初期化コードを実行する必要があります。メソッドは新しいインスタンスを返すので、Magicは不変であるため、コンストラクタで完全に初期化される可能性があります。私はそれを見ました(https://github.com/playframework/play-scala/blob/master/src/play/db/anorm/Anorm.scala 227行)。実際、オプションでラップされたコンストラクタでtableNameが必要です。だからあなたはオブジェクトを行うことができますユーザー拡張Magic [User](Some( "users")) –

+0

それは動作します!どうもありがとう! –

関連する問題