我正在努力实现以下目标:
我有一个简单的页面,访问者可以查看相册列表(索引操作),并通过单击任何相册,查看每个相册的照片(显示操作)。不应该可以访问其他操作(编辑,新建,更新,销毁)。
当用户登录时,她可以看到索引和显示页面,以及所有其他操作应该可用,但现在索引和显示将以不同方式锁定。不过,网址不应与之前有任何不同。
我创建了这些路线:
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
我还在user
和app/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"
答案 0 :(得分:1)
据我所知,如果使用不同的视图/控制器,您只需在登录后重定向用户。您可以使用设计after_sign_in_path_for方法。将其添加到您的应用程序控制器:
Legacy
但是对于允许/拒绝操作或显示/隐藏链接,更好的方法是使用像gem pundit这样的东西并避免干。