我正在为一组课程设置注册工具。课程有天(字符串),start_time(时间),end_time(时间)。我也在这个项目中使用Postgres。天的例子是“M,W,F”,但如果这会有所帮助,我可以改变。
我希望先按日,然后按时间对课程进行分组,但不要重复。我的意思是,如果一个班级在星期一/星期三/星期五开会,我很好地在星期一展示它。我们这样做主要是为了防止人们同时报名参加课程。
如果我有型号名称课程,我该如何以这种方式在视图上显示:
Monday:
CS1 | Intro to Programming | 10:00AM-11:00AM
CS2 | Intro to Java | 10:00AM-11:00AM
CS4 | Databases | 4:00PM-5:00PM
Tuesday:
CS3 | Intro to Web Dev | 3:00PM-5:00PM
我不确定将字符串作为字符串是最好的选择,但我不确定这是正确的方法。
课程模型:
create_table "courses", force: :cascade do |t|
t.string "name"
t.string "code"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "professor"
t.string "cformat"
t.string "sections"
t.integer "credits"
t.time "start_time"
t.time "end_time"
t.string "days"
t.integer "max_cap"
end
答案 0 :(得分:1)
如何保存星期几?
@monday_courses = Course.where(day_of_week: "Monday")
如果您正在保存类似" MWF"你可以这样做:
@monday_courses = Course.select {|course| course.day.include?("M")}
我确信可以通过添加额外的约束(可能只包含属于学校的课程或其他任何内容)进一步优化查询,但这基本上就是你所做的。
答案 1 :(得分:0)
这是我最终做的解决方案。我认为空间方面不是最有效的,但至少它是一个ActiveRecord查询,它消除了重复。同时拥有Hash是有帮助的,因为在视图中我能够创建表但没有复制表的代码,因为它在循环中并且当天是关键,当天的课程是作为数组的值
# Creating hash of classes
@monday_courses = Array.new
@tuesday_courses = Array.new
@wednesday_courses = Array.new
@thursday_courses = Array.new
@friday_courses = Array.new
Course.all.order("start_time ASC").each do |course|
if course.days.include?("M")
@monday_courses.push(course)
elsif course.days.include?("T")
@tuesday_courses.push(course)
elsif course.days.include?("W")
@wednesday_courses.push(course)
elsif course.days.include?("R")
@thursday_courses.push(course)
elsif course.days.include?("F")
@friday_courses.push(course)
end
end
@courses_hash = Hash["Monday" => @monday_courses, "Tuesday" => @tuesday_courses, "Wednesday" => @wednesday_courses, "Thursday" => @thursday_courses, "Friday" => @friday_courses]