0

私は次のように2つのドメインクラスを持っています

class Quiz {
    String name
    String description
    int duration
    User user
    int points
    static hasMany = [questions:Question]
}

class Question {
    String question
    String questionType
    int points  
    String option_1
    String option_2
    String option_3
    String option_4
    boolean isOption_1_Correct
    boolean isOption_2_Correct
    boolean isOption_3_Correct
    boolean isOption_4_Correct
    User user
    static belongsTo = [user:User]
}

クイズクラスのstatichasMany= [questions:Question]は、私の生活をずっと楽にしてくれました。また、addToやremoveFromなどの便利なメソッドを使用できるようになることも理解しています。私が持っている唯一の質問は、ユーザーが質問の表示順序を定義できるようにしたいということです。これを行う簡単な方法はありますか、それとも次のようなマッピングクラスを作成する必要がありますか?

class QuestionInQuiz {
    Quiz quiz
    Question question
    int displayOder
    static constraints = {
        question unique:['quiz']
    }
}

どういうわけかこのマッピングクラスの使用を避け、コードを単純に保つことができれば素晴らしいでしょう!

4

2 に答える 2

0

クラスにpositionプロパティを追加できます。クラスに静的クロージャをQuestion追加する必要があります。mappingQuiz

static mapping = {
    questions sort:'position'
} 

Question次に、をQuiz->とリンクする必要がありますbelongsTo = [user: User, quiz: Quiz]

Optionクラスと列挙型を作成してモデルを改良できると思います。QuestionType明日、5つまたは6つのオプションで質問がある場合はどうなりますか?コードを書き直し、再テストし、再コンパイルし、再デプロイしたいですか?

Comparableまたは、質問のインターフェイスを実装して、SortedSet質問を作成することもできます

class Quiz {
    SortedSet questions
    String name
    String description
    int duration
    User user
    int points
    static hasMany = [questions:Question]
}

class Question implements Comparable<Question> {
    String question
    String questionType
    int points  
    int position
    String option_1
    String option_2
    String option_3
    String option_4
    boolean isOption_1_Correct
    boolean isOption_2_Correct
    boolean isOption_3_Correct
    boolean isOption_4_Correct
    User user
    static belongsTo = [user:User]

    int CompareTo(obj){
        position <=> obj.position
    }
}
于 2012-09-01T12:30:12.700 に答える
0

追加する場合

List questions

Quiz(に加えて)クラスに追加すると、GORMhasManyList、デフォルトの順序付けされていないのではなく、関連付けにを使用しますSetGrailsのドキュメントで詳細が説明されています。

于 2012-09-01T13:12:24.457 に答える