2012-11-08 35 views
1

我在RAILS中有一個應用程序,它由一組API,一個基本網站和一個管理儀表板組成。 對於API路由我沒有任何問題,因爲它們屬於模型和控制器,並且符合RAILS RESTful模式(每個模型的控制器以及每種HTTP方法的方法)。網站的Rails控制器和路由配置

我不舒服的是寫網站的路線和控制器。 主站是在/所以默認路由是root :to => "home#index",我有 路線的網站頁面看起來像

get "home/index" 
    get "map/index" 
    get "api/index" 
    get "cgu/index" 
    get "legal/index" 

這一點我覺得這是不好的,因爲我有每個視圖控制器,我需要爲每個視圖定義一個get。 現在爲儀表板我嘗試了不同的方法。 正是在/儀表板,默認路由是match "dashboard" => "dashboard#index"這裏是幾頁的例子

get "dashboard/index" 
    get "dashboard/users" 
    get "dashboard/users_stats" 
    get "dashboard/routes" 
    get "dashboard/routes_stats" 
    get "dashboard/charts" 
    get "dashboard/financial" 

所以對於儀表盤我有一個巨大的dashboard_controller,其中包含了每種儀表盤頁面def method。 IE:

#dashboard/users 
    def users 
    @users = User.all 

    respond_to do |format| 
     format.html {render :layout => 'dashboard'} 
    end 
    end 

儀表板的控制器是在/控制器,但對意見和財產我已經把它放在/文件夾/儀表板/

下面是2個問題:

  • 是什麼建立家庭網站和儀表板的最佳方式?我應該在每個頁面上有一個控制器,還是在每頁有一個方法的全局控制器上? (我覺得非常方便,代碼少)。
  • 我應該如何組織我的路線,以避免爲每個頁面設置「某物/某物」? 或者對於我的每個頁面都定義了一個路由,RAILS是正常的嗎?我很新。

編輯: 爲了澄清,儀表板周圍API遵循REST風格的Rails模式的現有應用程序內置:

resources :users 
    resources :routes 

但儀表盤是不依賴於任何現有的資源,它只是做統計關於這些資源。

回答

1

如果您有自定義控制器操作名稱,那麼是的,您需要定義每個路由。如果您使用的寧靜的路線,那麼你就可以輕鬆地將它們定義爲

resources :users 

它會自動創建的行動路線:指數,顯示,編輯,更新,創建和銷燬。

這可能會有所幫助:http://guides.rubyonrails.org/routing.html

爲您的儀表板,這可能是彙集了大量的資源,所以他們很可能會自定義方法。我建議專注於通過個人資源構建您的應用程序。然後,一旦你定義了全部,建立你的儀表板。

+0

是的,儀表板不依賴於RESTful路由,因爲我沒有將它綁定到特定的模型。它是查詢現有的資源和模型來建立統計。 – Dimillian

0

檢查this guide如果你沒有;

我想你還沒有接受Rails的MVC概念。

例如,假設你有「用戶」。你應該在app目錄下有users_controller.rb,users.rb(model),/ views/users(view)。

users_controller包含

user.rb包含實例/靜態/輔助方法的指數,顯示,創建等默認動作和喜歡你的統計數據自定義操作

/視圖/用戶/包含對應模板控制器中的操作。

+0

我不認爲用我的儀表板遵循RESTful路由是一個好主意,它只使用get,沒有日期操作,不綁定任何模型。統計現有日期,資源和模型。 – Dimillian

+0

對於這個我認爲你只是做一個控制器/視圖沒有模型;該控制器僅包含自定義操作。但它不應該太大,如果是這樣,那麼可能有些行動應該是資源。 –

0

我同意其他人在這裏所說的一切。你一定要嘗試更加REST風格,創造更多的路線是這樣的:

resources :users 

然而,通常有一個控制器,是不是RESTful的,供應諸如PrivacyAbout Us等頁(通常稱爲網頁或靜態)對於這些路由,我通常這樣做:

['api', 'privacy', 'us'].each do |p| 
    get p, :controller => 'pages', :action => p 
end 
+0

好主意。可能會使路線變得不那麼明顯,但簡潔確實可以縮短路線。 –