在我的应用程序中,我有一个用户模型、学校模型、课程模型和教学大纲模型。用户或学校可以创建我通过多态关联设置的课程(课程belongs_to :hostable,学校/用户has_many :课程,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那么,这是配置我的路由的正确方法吗?
发布于 2012-06-28 23:26:00
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)。
https://stackoverflow.com/questions/11247490
复制相似问题