【问题标题】:Route devise to different controller/view set将设计路由到不同的控制器/视图集
【发布时间】:2017-04-13 22:30:32
【问题描述】:

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

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

当用户登录时,她可以看到 index 和 show 页面,以及所有其他操作应该可用,但现在 index 和 show 将锁定不同。不过,这些 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 目录,我在其中放置了命名空间(登录)的用户控制器和视图。

所以现在对于访问者(无需登录),应该使用默认的控制器/视图,但是一旦用户登录(使用设计),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"

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

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

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

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

    【讨论】:

    • 我之前做了很多研究,但我没有遇到这个。让它变得非常简单,只需更改一些链接就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-18
    • 2015-10-09
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    相关资源
    最近更新 更多