0

現在、ユーザーがログインまたはサインアップすると、たとえばショーページとして /users/1 にリダイレクトされます。

それらをサイトのルートだけにリダイレクトするために使用するルートがわかりません (たとえば、example.com/users/1 ではなく example.com)。ログインしたサイト ルートは表示ページになり、ログアウトしたサイト ルートは通常のサイト ホームページになります。

それが重要な場合、私はdeviseを使用しています。

現在のルート:

  devise_for :users, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout',
                                      :password => 'password', :confirmation => 'verification',
                                      :unlock => 'unblock', :registration => 'signup',
                                      :sign_up => 'new' }

  devise_scope :user do
    get   'login',          to: 'devise/sessions#new'
    get   'users/login',    to: 'devise/sessions#new'
    get   'logout',         to: 'devise/sessions#destroy'
    get   'signup',         to: 'devise/registrations#new'
    get   'password',       to: 'devise/passwords#new'
    match 'users/secret',   to: "devise/passwords#create",      via: :post
    match 'sessions/user',  to: 'devise/sessions#create',       via: :post
    match 'users/signup',   to: 'devise/registrations#create',  via: :post
    match 'users/signup',   to: 'devise/registrations#create',  via: :post
  end

  resources :users
  resources :sessions

  root 'site#index'

更新されたルート:

  devise_for :users, :path => '', :path_names => { :sign_in => 'login', :sign_out => 'logout',
                                      :password => 'password', :confirmation => 'verification',
                                      :unlock => 'unblock', :registration => 'signup',
                                      :sign_up => 'new' }

    get   'login' => 'users/login'

  devise_scope :user do
    get   'login',          to: 'devise/sessions#new'
    get   'users/login',    to: 'devise/sessions#new'
    get   'logout',         to: 'devise/sessions#destroy'
    get   'signup',         to: 'devise/registrations#new'
    get   'password',       to: 'devise/passwords#new'
    match 'users/secret',   to: "devise/passwords#create",      via: :post
    match 'sessions/user',  to: 'devise/sessions#create',       via: :post
    match 'users/signup',   to: 'devise/registrations#create',  via: :post
    match 'users/signup',   to: 'devise/registrations#create',  via: :post
  end

  get '', to: 'users#show', as: 'user'
  get 'edit', to: 'users#edit', as: 'user/edit'

  #resources :users
  resources :sessions

  # Authenticated Users:
  authenticated :user do
    root to: "users#show", as: :authenticated_root
  end

  # Non-Authenticated Users
  root to: 'site#index'
4

2 に答える 2

2

routes.rb で(目的 のページに宛先を変更します)to:

YourApp::Application.routes.draw do

  ...

  # Authenticated Users:
  authenticated :user do
    root to: 'user#show', as: :authenticated_root
  end

  # Non-Authenticated Users
  root to: 'site#index'

end

Rails 4 の修正: https://github.com/plataformatec/devise/issues/2393#issuecomment-17298414

UserController.rbcurrent_user内: show メソッドで、の代わりに使用してparams[:id]いることを確認してください。これを行うのは、通常、show アクションを呼び出すたびに を送信するためですidが、この場合はそうしません。

class UsersController < ApplicationController
  def show
    if params[:id].present?
      @user = User.find(params[:id])
    else
      @user = current_user
    end
  end
end
于 2013-11-04T17:26:48.000 に答える