2017-04-13 8 views
0

を設定する別のコントローラ/ビューに考案:ルートは、私は次のことを達成しようとしている

私は訪問者がアルバムのリストを表示(indexアクション)とアルバムのいずれかをクリックしてできる簡単なページを持っています、各アルバムの写真を見る(ショーアクション)。他のアクション(編集、新規、更新、破棄)には到達できません。

ユーザーがログインすると、インデックスとショーページが表示され、他のすべてのアクションが利用できるはずですが、今度はインデックスとショーのロックが異なります。ただし、URLは以前とは異なるものではありません。

私はこれらのルートを作成しました:

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" 

答えて

1

私はあなたが別のビュー/コントローラが使用されている場合にのみ、ログイン後にユーザーをリダイレクトする必要があります理解しています。 devise after_sign_in_path_forメソッドを使用することができます。アプリケーションコントローラにそれを追加します。

def after_sign_in_path_for(resource) 
    users_albums_path #or any route that you want use 
end 

しかし、許可/アクションや表示/非表示のリンクより良いアプローチを使用して、宝石punditのようなものを否定し、DRYを避けるため。

+0

私は以前かなりの研究をしましたが、私はこの問題に遭遇しませんでした。それは本当に簡単に、ちょうどいくつかのリンクを変更する必要があったと私はすべて設定されました。 – loxosceles

関連する問題