我有两个域类,如下所示
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 = [问题:问题]让我的生活变得更轻松。我也明白它可以使用addTo和removeFrom等便利方法。只有查询我才希望用户能够定义问题的显示顺序。有没有更简单的方法来执行此操作,还是必须创建一个映射类,如下所示?
class QuestionInQuiz {
Quiz quiz
Question question
int displayOder
static constraints = {
question unique:['quiz']
}
}
如果我能以某种方式避免使用这个映射类并保持我的代码更简单,那将是很棒的!
答案 0 :(得分:0)
您可以向position
课程添加Question
属性。您应该向mapping
类添加Quiz
静态闭包:
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
}
}
答案 1 :(得分:0)