2016-07-21 4 views
1

Eigentlich benutze ich zwei Modelle für meine App, die Benutzer und Admin ist und ich folgte alle Schritte, die bei der Verwendung von Device gem behandelt werden.Routing-Fehler bei der Verwendung mehrerer Modelle - RAILS 4.2.0

Und ich möchte mehrere Login haben. Wenn sich der Benutzer angemeldet hat, muss er zum entsprechenden Profil weitergeleitet werden und wenn Admin sich angemeldet hat, muss er auf sein jeweiliges Profil umgeleitet werden.

Ich weiß nicht, wo ich Fehler mache.

home/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> 

Als ich Benutzer gehen Link gibt mir Fehler Routing, die wie unten ist;

image1.png

Und wenn ich zu Admin gehen Link gibt mir Fehler Routing, die wie unten ist;

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 %> 

Kola/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 %> 

app/controllers/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 

Alle Vorschläge sind sehr willkommen.

Vielen Dank im Voraus.

Antwort

1

Wie Sie die Sitzungen contoller unter dem Benutzer Namensraum einnehmen,

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

Ihr sessions_controller Weg sein sollte,

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 

Das Formular, das Sie in der que eingenommen zu haben, in app/views/users/sessions/new.html.erb

sein
<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

Danke für die Antwort. Welche Daten gebe ich in die neue Datei ein users/session_controller.rb –

+0

Es sollte die Aktion enthalten, die die Benutzersitzung erstellt, ich aktualisierte die ANS Bitte überprüfen Sie – Sravan

+1

Sie sollten kein Formular oder HTML in der Steuerung – Sravan

0

Wenn Sie Ihren Controller in Routen als

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

und halten Sie Ihren Controller als app/controllers/session_controller.rb den Job tun ändern.

+0

Danke für die Antwort. Was wird ich in die neue Datei einfügen /session_controller.rb –

+0

Erneut gibt es mir Routing-Fehler nicht initialisierte Konstante SessionsController –

+0

Können Sie zeigen session_controller.rb –