【问题标题】:Sorting by days of week and time in Ruby on Rails在 Ruby on Rails 中按星期几和时间排序
【发布时间】:2016-03-31 19:42:31
【问题描述】:

我正在为一组课程设置注册工具。课程有天数(字符串)、开始时间(时间)、结束时间(时间)。我也在这个项目中使用 Postgres。天的一个例子是“M,W,F”,但如果有帮助,我可以更改。

我希望先按天分组课程,然后按时间分组,但不能重复。我的意思是,如果周一/周三/周五上课,我可以在周一展示它。我们这样做主要是为了防止人们同时注册课程。

如果我有一个模型名称Course,如何在视图上以这种方式显示:

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

【问题讨论】:

  • 当然有什么属性?
  • 我已将其添加到问题中,我最初的想法是创建一个哈希或数组并将它们分组在控制器中,以便我可以在视图中循环

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


【解决方案1】:

如何保存星期几?

@monday_courses = Course.where(day_of_week: "Monday")

如果您要保存“MWF”之类的内容,您可以执行以下操作:

@monday_courses = Course.select {|course| course.day.include?("M")}

我确信可以通过添加额外的约束来进一步优化查询(可能只是属于学校的课程或其他),但这基本上就是你要做的。

【讨论】:

  • 第二个建议是基于您的储蓄方式的解决方案...只需将“M”替换为星期几。
【解决方案2】:

这是我最终做的解决方案。我认为空间方面它不是最有效的,但至少它归结为一个 ActiveRecord 查询,它可以删除重复项。也有哈希是有帮助的,因为在视图中我能够创建表,但没有复制表的代码,因为它在循环中并且日期是关键,那天的课程是作为数组的值

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

【讨论】:

    猜你喜欢
    • 2014-06-26
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多