在Ruby on Rails中按星期和时间排序

时间:2016-03-31 19:42:32

标签: ruby-on-rails ruby postgresql ruby-on-rails-4

我正在为一组课程设置注册工具。课程有天(字符串),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

2 个答案:

答案 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]