路线设计到不同的控制器/视图集

时间:2017-04-13 22:30:33

标签: ruby-on-rails devise

我正在努力实现以下目标:

我有一个简单的页面,访问者可以查看相册列表(索引操作),并通过单击任何相册,查看每个相册的照片(显示操作)。不应该可以访问其他操作(编辑,新建,更新,销毁)。

当用户登录时,她可以看到索引和显示页面,以及所有其他操作应该可用,但现在索引和显示将以不同方式锁定。不过,网址不应与之前有任何不同。

我创建了这些路线:

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

我还在userapp/controllers目录下创建了app/views目录,其中放置了命名空间(已登录)的用户控制器和视图。

现在对于访问者(没有登录)应该使用默认的控制器/视图,但是一旦用户登录(使用设计),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 个答案:

答案 0 :(得分:1)

据我所知,如果使用不同的视图/控制器,您只需在登录后重定向用户。您可以使用设计after_sign_in_path_for方法。将其添加到您的应用程序控制器:

Legacy

但是对于允许/拒绝操作或显示/隐藏链接,更好的方法是使用像gem pundit这样的东西并避免干。