0

在我的应用程序中,我有一个用户模型、学校模型、课程模型和教学大纲模型。用户或学校可以创建我通过多态关联设置的课程(课程 belongs_to :hostable 和学校/用户 has_many :courses, as: :hostable)和课程 has_one 教学大纲。我的问题是如何为嵌套课程模型配置路线,该模型也嵌套了教学大纲模型。

resources :users do
  resources :courses do
   resources :syllabus
  end 
    member do
    put :enroll
   end
  end

 resources :schools do
  resources :courses do 
   resources :syllabuses
  end
   member do
  put :apply, :enroll
  end
end

因此,用户可以通过单击课程页面上的按钮来注册课程,在我的课程控制器中,我有:

def enroll
  @course = Course.find(params[:id])
  current_user.coursegroups.create(host_course_id: @course.id, role: 'applicant')
  respond_with @course
end

那么,这是配置我的路线的正确方法吗?

4

1 回答 1

1

Stefan 认为您应该小心嵌套超过一层的资源是对的,但我个人认为嵌套直到两层才无法管理。无论哪种方式,这只是个人喜好。

对于您的路线,我立即跳出来的一件事是没有必要将所有内容嵌套在用户和学校中,因为听起来您将以用户或学校的身份登录。包含登录用户的路由很难管理:用户无法共享它们,它们并不能真正反映指定资源的状态。例如:

/users/1/courses/14/syllabus/3

从理论上讲,courses/14/syllabus/3每个登录用户的工作方式都应该相同,但是任何试图共享此链接的人都需要首先包含他们自己的用户 ID 号,这有点愚蠢。而是像这样构建您的路线:

resource :sessions
resources :courses do
  resources :syllabus
  member do
    put :apply, :enroll
  end
end

在您的会话中,允许用户或学校登录,并根据使用CanCan之类的登录者来改变他们在视图中看到的内容(以及允许他们访问的资源)。现在您的路线将正确反映实际资源 ( /courses/14/syllabus/3)。

于 2012-06-28T15:26:00.463 回答