ruby-on-rails - 在 ruby​​ on Rails 中立即为所有用户创建出勤情况

标签 ruby-on-rails ruby ruby-on-rails-4.2

我必须以下模型:

class User < ActiveRecord::Base
  has_many  :addresses
  has_many  :enrollments
  has_many  :courses, :through => :enrollments
  has_many  :attendances
  has_many  :lessons, :through => :courses


class Enrollment < ActiveRecord::Base
  belongs_to :user
  belongs_to :course


class Course < ActiveRecord::Base
  has_many  :enrollments
  has_many  :users, :through => :enrollments
  has_many  :lessons
  has_many  :attendances, :through => :lessons

class Lesson < ActiveRecord::Base
  belongs_to :course
  has_many :attendances
  has_many :users, through: :course

class Attendance < ActiveRecord::Base
  belongs_to :user
  belongs_to :lesson

在我的考勤 Controller 中,我有:

class AttendancesController < ApplicationController
  before_filter :set_lesson
def new
    @attendance = @lesson.attendances.new
end
def create
    #@attendance = Attendance.new(attendance_params)
    @attendance = @course.attendances.new(params[:milestone])
    respond_to do |format|
      if @attendance.save
        format.html { redirect_to @attendance, notice: 'Attendance was successfully created.' }
        format.json { render :show, status: :created, location: @attendance }
      else
        format.html { render :new }
        format.json { render json: @attendance.errors, status: :unprocessable_entity }
      end
    end
end

def set_lesson
   @course = Course.find(params[:course_id]) 
   @lesson = @course.lessons.find(params[:lesson_id])
end

我的嵌套路线:

Rails.application.routes.draw do

  #resources :attendances
  resources :courses do
    resources :lessons do
      resources :attendances
    end
    resources :enrollments
    end

我想要实现的是为注册该类(class)类(class)的用户创建该类(class)的出勤情况。任何使这成为可能的建议或帮助将不胜感激。我见过类似的问题,但它们的结构与我不一样。 截至目前,当我单击“新出勤”时,我只得到一份记录创建表单,但我希望它显示所有学生姓名和每个学生的出勤字段,这样我就可以一次性提交所有内容。我已经尝试了两天了,但没有成功,所以请帮忙。 提前致谢。

create_table "attendances", force: :cascade do |t|
    t.integer  "user_id",    null: false
    t.integer  "lesson_id",  null: false
    t.string   "status",     null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "attendances", ["lesson_id"], name: "index_attendances_on_lesson_id", using: :btree
  add_index "attendances", ["user_id"], name: "index_attendances_on_user_id", using: :btree

  create_table "courses", force: :cascade do |t|
    t.string   "name"
    t.string   "section"
    t.text     "description"
    t.datetime "created_at",  null: false
    t.datetime "updated_at",  null: false
    t.date     "start_date"
    t.date     "end_date"
  end

  create_table "enrollments", force: :cascade do |t|
    t.integer  "user_id"
    t.integer  "course_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  add_index "enrollments", ["course_id"], name: "index_enrollments_on_course_id", using: :btree
  add_index "enrollments", ["user_id"], name: "index_enrollments_on_user_id", using: :btree

  create_table "homes", force: :cascade do |t|
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

  create_table "lessons", force: :cascade do |t|
    t.datetime "meeting",               null: false
    t.datetime "end_time",              null: false
    t.string   "subject",    limit: 40, null: false
    t.integer  "course_id"
    t.datetime "created_at",            null: false
    t.datetime "updated_at",            null: false
  end

  add_index "lessons", ["course_id"], name: "index_lessons_on_course_id", using: :btree

  create_table "registrations", force: :cascade do |t|
    t.integer  "user_id",    null: false
    t.integer  "course_id",  null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

最佳答案

您正在布置相当复杂的关联,但我不确定我是否遵循您想要执行的确切程序。无论如何,一旦您了解了创建关联记录的基本概念,您应该能够使其适应您的特定场景。

所以,放弃你所说的:

what I want to achieve is to create an attendance for a lesson for users that are registered to the course of that session.

假设您有以下关联:

  • 类(class)有很多用户
  • 类(class)有很多出席者
  • 出勤有一个 user_id 列

假设您有一个要开始的lesson_id

然后你可以写:

lesson = Lesson.find(lesson_id)
users = lesson.users
users.each { |user| lesson.attendances.create(user: user) }

或者类似的东西,以便为属于类(class)的每个用户创建出勤率。

关于ruby-on-rails - 在 ruby​​ on Rails 中立即为所有用户创建出勤情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37997229/

相关文章:

ruby-on-rails - rails 3 + 设计 : on after_inactive_sign_up_path_for() how show the not-yet-confirmed user's email address?

mysql - 无法从 "Lost connection to MySQL server"错误中解救

ruby-on-rails - Rails 4 - 将日期时间转换为单独的日期和时间字段

ruby - Data_Wrap_Struct 和销毁顺序

ruby - 我可以在 Ruby 中动态调用数学运算符吗?

ruby-on-rails - 无法找到 ID ="your_question"

ruby-on-rails - 页面内容中 html 实体的 Rspec 测试

ruby-on-rails - 在 ActiveJob 和 Controller 之间共享数据

ruby-on-rails - 在单个页面上停止片段缓存 - Spree

ruby-on-rails - 在 Heroku 上为 Rails 4.2 应用程序正确配置 Postgres 数据库