[英]Route devise to different controller/view set
我正在努力實現以下目標:
我有一個簡單的頁面,訪問者可以在其中查看相冊列表(索引操作),並通過單擊任意相冊查看每個相冊的照片(顯示操作)。 沒有其他動作(編輯,新增,更新,銷毀)應該可以實現。
當用戶登錄時,她可以看到索引和顯示頁面以及所有其他操作,但是現在索引和顯示將以不同的方式鎖定。 不過,這些網址應該不會與以前有任何不同。
我創建了以下路線:
users_albums GET /users/albums(.:format) users/albums#index
users_album GET /users/albums/:id(.:format) users/albums#show
new_users_album GET /users/albums/new(.:format) users/albums#new
.... and so on ...
albums GET /albums(.:format) albums#index
album GET /albums/:id(.:format) albums#show
我還在app/controllers
和app/views
目錄下創建了user
目錄,在其中放置了命名空間(登錄)的用戶控制器和視圖。
因此,現在對於訪問者(無登錄名),應該使用默認的控制器/視圖,但是一旦用戶登錄(使用devise), user
目錄下的控制器/視圖就應該接管。
我該如何進行重定向?
到目前為止,這是我的routes.rb:
devise_for :users, skip: [:registrations]
as :user do
get "/sign_in" => "devise/sessions#new" # custom path to login/sign_in
get "/sign_up" => "devise/registrations#new", as: "new_user_registration" # custom path to sign_up/registration
get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'users' => 'devise/registrations#update', :as => 'user_registration'
end
namespace :users do
resources :albums do
resources :photos
end
end
resources :albums, only: [:index, :show] do
resources :photos, only: [:index, :show]
end
root to: "albums#index"
據我了解,只有使用不同的視圖/控制器時,才需要在登錄后重定向用戶。 您可以使用devise after_sign_in_path_for方法。 將其添加到您的應用程序控制器:
def after_sign_in_path_for(resource)
users_albums_path #or any route that you want use
end
但是對於允許/拒絕操作或顯示/隱藏鏈接,更好的方法是使用諸如寶石專家之類的方法,並避免DRY。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.