0

我有两个域类如下

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]
}

测验课上的 static hasMany = [questions:Question] 让我的生活变得轻松多了。我也知道它将能够使用 addTo 和 removeFrom 等便捷方法。我唯一的查询是我希望用户能够定义问题的显示顺序。有没有更简单的方法可以做到这一点,还是我必须创建一个如下所示的映射类?

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

如果我能以某种方式避免使用这个映射类并让我的代码更简单,那就太好了!

4

2 回答 2

0

如果你添加

List questions

对于您的Quiz班级(除了hasMany),GORM 将使用 aList进行关联,而不是默认的 unordered SetGrails 文档解释了细节。

于 2012-09-01T13:12:24.457 回答
0

您可以将position属性添加到Question类。您应该mapping向类添加一个静态闭包Quiz

static mapping = {
    questions sort:'position'
} 

然后你应该QuestionQuiz->链接belongsTo = [user: User, quiz: Quiz]

我相信你可以改进你的模型创建一个Option类和一个枚举QuestionType如果明天你有一个有 5 或 6 个选项的问题会发生什么?您想重写、重新测试、重新编译和重新部署您的代码吗?

或者您可以Comparable在 Question 中实现接口并创建一系列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 回答