From 81380ea879011eac6cbd36c38755d3f2156b8b3c Mon Sep 17 00:00:00 2001 From: cxt <853663049@qq.com> Date: Mon, 2 Mar 2020 16:08:10 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=BE=E5=88=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/attendances_controller.rb | 38 +++++++++++++++++++ app/models/course.rb | 4 ++ app/models/course_attendance.rb | 13 +++++++ app/models/course_attendance_group.rb | 5 +++ config/routes.rb | 2 + ...0200302034841_create_course_attendances.rb | 15 ++++++++ ...2035218_create_course_attendance_groups.rb | 13 +++++++ spec/models/course_attendance_group_spec.rb | 5 +++ spec/models/course_attendance_spec.rb | 5 +++ 9 files changed, 100 insertions(+) create mode 100644 app/controllers/attendances_controller.rb create mode 100644 app/models/course_attendance.rb create mode 100644 app/models/course_attendance_group.rb create mode 100644 db/migrate/20200302034841_create_course_attendances.rb create mode 100644 db/migrate/20200302035218_create_course_attendance_groups.rb create mode 100644 spec/models/course_attendance_group_spec.rb create mode 100644 spec/models/course_attendance_spec.rb diff --git a/app/controllers/attendances_controller.rb b/app/controllers/attendances_controller.rb new file mode 100644 index 000000000..fc94eaf5b --- /dev/null +++ b/app/controllers/attendances_controller.rb @@ -0,0 +1,38 @@ +class AttendancesController < ApplicationController + before_action :require_login + before_action :find_course, only: [:create, :index] + + def create + ActiveRecord::Base.transaction do + attendance = @course.course_attendances.create!(create_params) + unless params[:group_ids].blank? + params[:group_ids].each do |group_id| + @course.course_attendance_groups.create!(course_group_id: group_id, course_attendance: attendance) + end + else + + end + end + end + + def index + + end + + def show + + end + + def update + + end + + def destroy + + end + + private + def create_params + params.permit(:name, :mode, :attendance_date, :start_time, :end_time) + end +end \ No newline at end of file diff --git a/app/models/course.rb b/app/models/course.rb index 14c17cf39..74be99bb2 100644 --- a/app/models/course.rb +++ b/app/models/course.rb @@ -90,6 +90,10 @@ class Course < ApplicationRecord # 直播 has_many :live_links, dependent: :destroy + # 签到 + has_many :course_attendances, dependent: :destroy + has_many :course_attendance_groups, dependent: :destroy + validate :validate_sensitive_string scope :hidden, ->(is_hidden = true) { where(is_hidden: is_hidden) } diff --git a/app/models/course_attendance.rb b/app/models/course_attendance.rb new file mode 100644 index 000000000..fcad77ec1 --- /dev/null +++ b/app/models/course_attendance.rb @@ -0,0 +1,13 @@ +class CourseAttendance < ApplicationRecord + belongs_to :course + belongs_to :user + + has_many :course_attendance_groups, dependent: :destroy + + validates :name, presence: true + validates :mode, presence: true + validates :attendance_date, presence: true + validates :start_time, presence: true + validates :end_time, presence: true + +end diff --git a/app/models/course_attendance_group.rb b/app/models/course_attendance_group.rb new file mode 100644 index 000000000..8de9ebe88 --- /dev/null +++ b/app/models/course_attendance_group.rb @@ -0,0 +1,5 @@ +class CourseAttendanceGroup < ApplicationRecord + belongs_to :course + belongs_to :course_attendance + belongs_to :course_group +end diff --git a/config/routes.rb b/config/routes.rb index ba0827676..6a25a076e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -554,6 +554,8 @@ Rails.application.routes.draw do end end + resources :attendances, only: [:index, :update, :create, :show, :destroy], shallow: true + resources :live_links, only: [:index, :update, :create, :edit, :destroy], shallow: true resources :homework_commons, shallow: true do diff --git a/db/migrate/20200302034841_create_course_attendances.rb b/db/migrate/20200302034841_create_course_attendances.rb new file mode 100644 index 000000000..25eaf0d8e --- /dev/null +++ b/db/migrate/20200302034841_create_course_attendances.rb @@ -0,0 +1,15 @@ +class CreateCourseAttendances < ActiveRecord::Migration[5.2] + def change + create_table :course_attendances do |t| + t.references :course, index: true + t.references :user, index: true + t.string :name + t.integer :mode, limit: 1, default: 0 + t.date :attendance_date + t.time :start_time + t.time :end_time + + t.timestamps + end + end +end diff --git a/db/migrate/20200302035218_create_course_attendance_groups.rb b/db/migrate/20200302035218_create_course_attendance_groups.rb new file mode 100644 index 000000000..0f76beea3 --- /dev/null +++ b/db/migrate/20200302035218_create_course_attendance_groups.rb @@ -0,0 +1,13 @@ +class CreateCourseAttendanceGroups < ActiveRecord::Migration[5.2] + def change + create_table :course_attendance_groups do |t| + t.references :course, index: true + t.references :course_attendance + t.references :course_group, index: true + + t.timestamps + + add_index :course_attendances, [:course_attendance_id, :course_group_id, :course_id], name: "course_group_attendance", unique: true + end + end +end diff --git a/spec/models/course_attendance_group_spec.rb b/spec/models/course_attendance_group_spec.rb new file mode 100644 index 000000000..2fc1a2a0a --- /dev/null +++ b/spec/models/course_attendance_group_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CourseAttendanceGroup, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/models/course_attendance_spec.rb b/spec/models/course_attendance_spec.rb new file mode 100644 index 000000000..a54f4be64 --- /dev/null +++ b/spec/models/course_attendance_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe CourseAttendance, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end