Ruby on rails 讲座';完成';RubyonRails4课程教学网站中每个用户的状态
我正在用RubyonRails制作一个课程网站,其中课程是主要资源,讲座是嵌套资源。现在,当用户为课程付费时,讲座就开始了 我想在讲座和用户之间建立一些数据库或关系。当用户位于讲座的“显示”页面时,该用户在讲座上的状态为“正在进行”,如果用户移动到下一个讲座或其他讲座,则该状态应为“已完成” 通过这种方式,我想向用户展示他们的进度。请帮我做一下这个的模型和电话 Routes.rb中的路由如下所示:Ruby on rails 讲座';完成';RubyonRails4课程教学网站中每个用户的状态,ruby-on-rails,Ruby On Rails,我正在用RubyonRails制作一个课程网站,其中课程是主要资源,讲座是嵌套资源。现在,当用户为课程付费时,讲座就开始了 我想在讲座和用户之间建立一些数据库或关系。当用户位于讲座的“显示”页面时,该用户在讲座上的状态为“正在进行”,如果用户移动到下一个讲座或其他讲座,则该状态应为“已完成” 通过这种方式,我想向用户展示他们的进度。请帮我做一下这个的模型和电话 Routes.rb中的路由如下所示: devise_for :users, controllers: {registrations: '
devise_for :users, controllers: {registrations: 'registrations'}
resources :courses, only: [:index, :show] do
resources :lectures, only: [:index, :show]
resources :enrols, only: [:create]
“注册”为用户注册课程讲座并授权
app/models/touch.rb:
class Lecture < ActiveRecord::Base
belongs_to :course
end
课堂讲座
app/models/course.rb:
class Course < ActiveRecord::Base
has_many :lectures, dependent: :destroy
has_many :coupons, dependent: :destroy
has_many :enrols, dependent: :destroy
has_many :users, through: :enrols
end
课程
app/models/user.rb:
class User < ActiveRecord::Base
has_many :enrols, dependent: :destroy
has_many :courses, through: :enrols
end
class用户
app/models/enrol.rb:
class Enrol < ActiveRecord::Base
belongs_to :user
belongs_to :course
end
class注册
如果需要其他代码来回答我的问题,请告诉我。我认为您需要的是用户和讲座之间的多对多关系,该关系具有名为
status
的属性
class UserProgress < ActiveRecord::Base
belongs_to :user
belongs_to :lecture
end
class User < ActiveRecord::Base
has_many :user_progresses, dependent: :destroy
has_many :lectures, through: :user_progresses
end
class Lecture < ActiveRecord::Base
has_many :user_progresses, dependent: :destroy
end
感谢Hoang提供的非常好的解释和解决方案。我想问的另一件事是,数据库中的user_proges表中会有什么?它将包含对user和teaching以及status属性的两个引用
class LecturesController < ApplicationController
def show
# set all other user's lectures' status to 'done'
current_user.user_progresses.update_all(status: 'done')
# set current lecture's status to 'doing'
progress = current_user.user_progresses.find_or_initialize_by(lecture: @lecture)
progress.status = 'doing'
progress.save
# ...
end
end
- current_user.user_progresses.includes(:lecture).each do |progress|
= progress.lecture.title
= progress.status