首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby on rails应用程序中的嵌套模型路由

ruby on rails应用程序中的嵌套模型路由
EN

Stack Overflow用户
提问于 2012-06-28 23:03:22
回答 1查看 388关注 0票数 0

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

代码语言:javascript
复制
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

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

代码语言:javascript
复制
def enroll
  @course = Course.find(params[:id])
  current_user.coursegroups.create(host_course_id: @course.id, role: 'applicant')
  respond_with @course
end

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-28 23:26:00

Stefan是对的,你应该小心嵌套超过一层的资源,但我个人认为嵌套直到两层才会变得不可管理。不管怎样,这只是个人喜好。

对于你的路线,我马上想到的一件事是,没有必要在用户和学校中嵌套所有内容,因为这听起来像是你将以用户或学校的身份登录。带有登录用户的路由很难管理:用户不能共享它们,并且它们不能真正反映指定资源的状态。例如:

代码语言:javascript
复制
/users/1/courses/14/syllabus/3

从理论上讲,courses/14/syllabus/3对于每个登录的用户都应该是一样的,但任何试图共享链接的人都需要首先包括他们自己的用户ID号,这有点愚蠢。取而代之的是像这样组织你的路由:

代码语言:javascript
复制
resource :sessions
resources :courses do
  resources :syllabus
  member do
    put :apply, :enroll
  end
end

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11247490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档