试图设计一个控制器来显示课程(Rails)

时间:2011-03-08 17:51:09

标签: ruby-on-rails

以下是与我的问题相关的模型。我试图设计一种方法来显示CourseEnrollments以及他们给特定患者的步骤。这是我到目前为止所提出的。

INDEX ACTION - / course_enrollments / - >用户注册的展示课程以及最新的课程概述。这可以重定向到最近的课程。

显示行动 - / course_enrollments /:id - >用户注册的展示课程以及最新的课程概述

我正在努力弄清楚的部分是如何显示课程的单个步骤。这应该在course_steps控制器(嵌套在课程资源中)中完成吗?

class Course < ActiveRecord::Base
  belongs_to :course_category
  belongs_to :client
  belongs_to :user_created, :foreign_key => :user_created_by, :class_name => "User"
  belongs_to :user_updated, :foreign_key => :user_last_updated_by, :class_name => "User"
  has_many :course_steps, :dependent => :destroy
  has_many :steps, :through => :course_steps
  has_many :course_requests, :dependent => :destroy
  has_many :course_enrollments, :dependent => :destroy
  has_many :patients, :through =>:course_enrollments
end

class CourseStep < ActiveRecord::Base
  belongs_to :step
  belongs_to :course

 validates_uniqueness_of :step_id, :scope => :course_id
end

class Step < ActiveRecord::Base
 belongs_to :step_type
 belongs_to :client
 has_one :step_quiz, :dependent => :destroy
 has_one :step_survey, :dependent => :destroy
 has_one :step_text, :dependent => :destroy
 has_one :step_download, :dependent => :destroy
 has_one :step_video, :dependent => :destroy
 has_one :step_presentation, :dependent => :destroy
 has_many :course_steps, :dependent => :destroy
 has_many :courses, :through => :course_steps
end


class CourseEnrollment < ActiveRecord::Base
  belongs_to :patient
  belongs_to :course
end

class Patient < ActiveRecord::Base
  belongs_to :user, :dependent => :destroy
  has_many :enrollments, :dependent => :destroy
  has_many :clients, :through => :enrollments
  has_many :course_requests, :dependent => :destroy
  has_many :course_enrollments, :dependent => :destroy
  has_many :courses, :through => :course_enrollments
end

2 个答案:

答案 0 :(得分:0)

如果你需要为课程显示一个单独的步骤,你肯定需要使用course_steps控制器,逻辑是,每个CourseStep对象是一门课程和一步的组合。

答案 1 :(得分:0)

通常的方法是嵌套这些并具有复合路径,但是如何路由这些东西通常取决于所涉及的上下文的级别。例如,用户驱动的课程的显示程度应该是路径应该包含用户的程度,还是仅仅个性化课程页面的情况?

通常你会看到这样的事情:

resources :courses do |course|
  course.resources :enrollments
  course.resources :steps
end

您的has_many关系与声明等效resources之间通常存在关联,但并非总是如此。

使用rake routes查看生成的路由,以查看传递给控制器​​时将调用的参数,以及预期的控制器名称。您可以通过将:controller选项传递给路径来自定义控制器的名称。

通常,路径中的最后一条记录以:id传递,而先前的记录则被命名为:course_id。这有点烦人的不一致,所以要小心检查你是否使用正确的参数加载。