2017-01-07 3 views
1

私は以下のケースクラスを持っており、フォームマッピング関数を作成したいと思います。クラスは、独自の型のオブジェクトを使用します。どのようにしてこのようなシナリオのマッピング機能を記述できますか?フォームマッピングでクラス自体を参照する方法

case class User (
    name:String, 
    age:Int, 
    female:Boolean, 
    address:Address, //this is another case class of 3 Strings 
    friends:List[User], //an object of its own type 
    spouse:Option[User] 
) 

私がこれまでに書かれているが、

val userForm = Form((mapping("name"->text, 
    "age"->number, 
    "female"->boolean, 
    "address"->mapping("fullStreet"->text, 
         "county"->text, 
         "country"->text)(Address.apply)(Address.unapply), 
    "friends"->list(???), 
    "spouse"->optional(???) 
    )(User.apply)(User.unapply)) 

答えて

0

がしばしばタイプは足で自分自身を撮影からあなたを助ける友人や配偶者を処理する方法がわかりません。あなたがこの種の状況に陥ったときにやっていることを再考することは、時には賢明です。

この特定の状況では、友人の友人なども望む、無限に再帰的な構造を実際に望むことはほとんどありません。これはおそらくデータベース全体になります。また、配偶者は配偶者の配偶者が同じ人物であるため、問題が生じます。データ構造は決して終わらないでしょう。同じことが友人にも当てはまります。もちろん、私はあなたの友人を検討することもでき、あなたが実際に友人として私を考慮することができませんでしたが、これらの状況は、ルールの例外です:)

あなたはおそらく何をしたいかのいずれかの2つのいずれかである:

  1. 基本プロパティのみを持つユーザーの特性とケースクラスを作成します(友だちと配偶者はいない)ので、Userケースクラスの基底としてその特性を使用し、friendsspouseの基底型としてそのケースクラスを使用します。
  2. ユーザーIDを割り当て、その方法でユーザーを参照します。 Friendsは、Set[UserId]spouse a Option[UserId]になります。
+0

あなたの入力を高く評価してください。私はScalaとPlayの両方に新しく、これはPlay/Javaの本から選んだ練習です。私はScala/Playで同じことをする方法ができませんでした。 Scala/Playのコーディングの観点からこの問題がどのように解決できるか教えてください。 –

+0

それはデザインに全く依存します。私は間違いなくあなたがユーザー、広告無限を持っているユーザーを持っているユーザーと一緒に取った道を行くことはありません。それはどこに問題があるのか​​、それが答えがあるところです。私が与えた2つの提案のように、動作するデザインを選んでください。コーディングを続けることができると確信しています。 –

+0

あなたが私の答えを受け入れると、@ ManuChadhaは素敵でしょう。 –

関連する問題