2013-12-20 63 views
0

我有一個資源profile,我希望用戶能夠以各種方式訪問​​。我想登錄的用戶能夠從這些途徑訪問自己的個人資料:Rails路由/身份驗證單身資源

GET /profile 
GET /profile/edit 
PATCH /profile 
PUT /profile 

而且我想型材可以觀看來自這條航線:

GET /profiles/:id 

配置文件無法創建或刪除用戶不能編輯其他用戶的配置文件。我也不想暴露給用戶的配置文件索引,所以沒有這些路線應提供:

GET /profile/new 
POST /profile 
DELETE /profile 
GET /profiles 
GET /profiles/:id/edit 
PATCH /profiles/:id 
PUT /profiles:id 
DELETE /profiles/:id 
GET /profiles/new 
POST /profiles 

我使用這個路由映射:

resources :profiles, only: [:show] 
resource :profile, only: [:show, :edit, :update] 

兩個問題:

  1. 我該說的是正確的方法嗎?

  2. 當我在/profile/edit提交表格時,它會嘗試修補到/profiles/:id,這是無效的。它似乎應該補丁到/profile。我究竟做錯了什麼?

+0

聽起來像你想使用'cancan'這樣的寶石 – Donovan

回答

0

如果您使用像resource :profile, only: [:show, :edit, :update]這樣的單例資源,它假定只有其中一個用於整個應用程序。

如果您真的認爲用戶必須擁有這些路由,只需將其映射到他們所屬的路由。

resources :profiles, only: [:show, :edit, :update] 
get '/profile', to: 'profiles#show' 
... 
+0

該文檔似乎不同意你的看法。 「因爲你可能想要爲單一路線(/賬戶)和複數路線(/ accounts/45)使用同一個控制器,所以單數資源映射到多個控制器。例如,資源:照片和資源:照片創建映射到相同控制器(PhotosController)的單數和複數路線。「 –