2016-07-21 7 views
1

実際に私のアプリにはUserとAdminという2つのモデルが使用されていますが、devise gemを使用している間はすべての手順に従って処理しています。複数のモデルを使用中にDEVICEルーティングエラーが発生しました - RAILS 4.2.0

複数のログインが必要です。ユーザーがログインすると、それぞれのプロファイルにリダイレクトする必要があり、管理者がログインしたときに、それぞれのプロファイルにリダイレクトする必要があります。

私は間違いをどこにしているのか分かりません。

ホーム/ index.html.erb

<ul> 
    <li>User:<%= link_to 'User', new_user_session_path, target: "_blank" %></li> 
    <li>Admin:<%= link_to 'Admin', new_admin_session_path, target: "_blank" %></li> 
</ul> 

私はユーザーリンクに行くとき、それは私は以下の通りですエラーをルーティングできます。

image1.png

そして私は、それは以下の通りですエラーをルーティング私を与え管理リンクにアクセスしてください。

image2.png

routes.rbを

Rails.application.routes.draw do 

root "home#index" 

    devise_for :users, controllers: { 
     sessions: 'users/sessions', 
     registrations: 'users/registrations' 
     } 

    devise_scope :user do 
    authenticated do 
     root to: 'aslani#index', as: 'authenticated_user_root' 
    end 

    unauthenticated do 
     root to: 'aslani#index', as: 'unauthenticated_user_root' 
    end 
    end 

    devise_for :admins, controllers: { 
     sessions: 'admins/sessions', 
     registrations: 'admins/registrations' 
     } 

    devise_scope :admin do 
    authenticated do 
     root to: 'yaseen#index', as: 'authenticated_admin_root' 
    end 

    unauthenticated do 
     root to: 'yaseen#index', as: 'unauthenticated_admin_root' 
    end 
    end 

end 

aslani/index.html.erb

 <% if user_signed_in? %> 
      I am Aslani. 
      <%= link_to 'Log out', destroy_user_session_path, method: :delete %> 
     <% else %> 
      <%= link_to 'Log In', new_user_session_path %> 
      <%= link_to 'Sign Up', new_user_registration_path %> 
     <% end %> 

index.html.erbコーラ/

<% if admin_signed_in? %> 
     I am Kola. 
     <%= link_to 'Log out', destroy_admin_session_path, method: :delete %> 
    <% else %> 
     <%= link_to 'Log In', new_admin_session_path %></li> 
     <%= link_to 'Sign Up', new_admin_registration_path %> 
    <% end %> 

アプリ/コントローラ/ users/sessions_c ontroller.rb

class Users::SessionsController < Devise::SessionsController 
     def new 
     super 
     end 

     def create 
      self.resource = warden.authenticate!(auth_options) 
      set_flash_message(:notice, :signed_in) if is_navigational_format? 
      sign_in(resource_name, resource) 
      if !session[:return_to].blank? 
      redirect_to session[:return_to] 
      session[:return_to] = nil 
      else 
      respond_with resource, :location =>  after_sign_in_path_for(resource) 
      end 
    end 
    end 

すべての提案が大歓迎です。

ありがとうございます。

答えて

1

あなたは、ユーザーの名前空間の下にセッションのcontollerを取っているとして、あなたのsessions_controllerパスがあるべき

devise_for :users, controllers: { 
     sessions: 'users/sessions', 
     registrations: 'users/registrations' 
} 

app/controllers/users/sessions_controller.rb 

    class Users::SessionsController < Devise::SessionsController 
     def new 
     super 
     end 

     def create 
      self.resource = warden.authenticate!(auth_options) 
      set_flash_message(:notice, :signed_in) if is_navigational_format? 
      sign_in(resource_name, resource) 
      if !session[:return_to].blank? 
      redirect_to session[:return_to] 
      session[:return_to] = nil 
      else 
      respond_with resource, :location =>  after_sign_in_path_for(resource) 
      end 
    end 
    end 

あなたはQUEで撮影したフォームはapp/views/users/sessions/new.html.erb

にする必要があります
<h2>Log in</h2> 

<%= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| %> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, autofocus: true %> 
    </div> 

    <div class="field"> 
    <%= f.label :password %><br /> 
    <%= f.password_field :password, autocomplete: "off" %> 
    </div> 

    <% if devise_mapping.rememberable? -%> 
    <div class="field"> 
     <%= f.check_box :remember_me %> 
     <%= f.label :remember_me %> 
    </div> 
    <% end -%> 

    <div class="actions"> 
    <%= f.submit "Log in" %> 
    </div> 
<% end %> 

<%= render "users/shared/links" %> 
+0

返事をありがとう。新しいファイルusers/session_controller.rbにどのデータを入れますか? –

+0

ユーザーセッションを作成するアクションが含まれています。確認してください。 – Sravan

+1

コントローラにフォームまたはHTMLを入れないでください。 – Sravan

0

あなたは

devise_for :users, controllers: { registrations: 'registrations', sessions: 'sessions', passwords: 'passwords', confirmations: 'confirmations', }

としてのルートでご使用のコントローラーを変更して、アプリ/コントローラ/ session_controller.rbが仕事をするようにコントローラを保持する場合。

+0

返信いただきありがとうございます。私は新しいファイル/session_controller.rbに入れます。 –

+0

もう一度返信します ルーティングエラー 初期化されていない定数SessionsController –

+0

session_controller.rbを表示できますか? –

関連する問題