簡體   English   中英

將設計路由到不同的控制器/視圖集

[英]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/controllersapp/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM