2012-06-28 32 views
0

在我的應用我有一個用戶模式,辦學模式,課程模式和課程模式。用戶或學校可以創建我已經通過多態關聯(當然belongs_to的:主存,和學校/用戶的has_many:課程,如:主存)設置課程和課程教學大綱HAS_ONE。我的問題是如何配置嵌套課程模型的路線,嵌套課程模型也有嵌套在其中的教學大綱模型。嵌套模型路線on Rails應用程序

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 

所以,這是我的配置路線的正確方法?

+1

有一個在[文檔]報價(http://guides.rubyonrails.org/routing.html#limits-to-nesting),說:_「資源不應該被嵌套超過10級深。」 _ – Stefan

回答

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)。