以下是与我的问题相关的模型。我试图设计一种方法来显示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
答案 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
。这有点烦人的不一致,所以要小心检查你是否使用正确的参数加载。