Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 讲座';完成';RubyonRails4课程教学网站中每个用户的状态_Ruby On Rails - Fatal编程技术网

Ruby on rails 讲座';完成';RubyonRails4课程教学网站中每个用户的状态

Ruby on rails 讲座';完成';RubyonRails4课程教学网站中每个用户的状态,ruby-on-rails,Ruby On Rails,我正在用RubyonRails制作一个课程网站,其中课程是主要资源,讲座是嵌套资源。现在,当用户为课程付费时,讲座就开始了 我想在讲座和用户之间建立一些数据库或关系。当用户位于讲座的“显示”页面时,该用户在讲座上的状态为“正在进行”,如果用户移动到下一个讲座或其他讲座,则该状态应为“已完成” 通过这种方式,我想向用户展示他们的进度。请帮我做一下这个的模型和电话 Routes.rb中的路由如下所示: devise_for :users, controllers: {registrations: '

我正在用RubyonRails制作一个课程网站,其中课程是主要资源,讲座是嵌套资源。现在,当用户为课程付费时,讲座就开始了

我想在讲座和用户之间建立一些数据库或关系。当用户位于讲座的“显示”页面时,该用户在讲座上的状态为“正在进行”,如果用户移动到下一个讲座或其他讲座,则该状态应为“已完成”

通过这种方式,我想向用户展示他们的进度。请帮我做一下这个的模型和电话

Routes.rb中的路由如下所示:

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