2016-04-15 27 views
2

Ich habe ein Benutzermodell für die Autorisierung mit Device gem. Ich möchte after_sign_in_path Methode hinzufügen:undefined Methode `user_url 'für Devise SessionsController: create

# application_controller.rb 
 

 
protected 
 
# redirecting to appropriate url based on role 
 
    def after_sign_in_path_for(resource) 
 
    if current_user.has_role?(:admin) 
 
     dashboard_path 
 
    elsif current_user.has_role?(:student) 
 
     root_path 
 
    end 
 
    end
Immer wenn ich versuche anzumelden ich diesen Fehler:

undefined method `user_url' for #<Devise::SessionsController:0x007fb89b5b00a8> Did you mean? course_url
Ich weiß nicht, warum es sagt: ‚Meinten Sie ? Kursurl. Aber ich habe Kursmodell. Und hier sind meine Routen:

authenticate :user do 
 

 
    resources :feeds, only: [:index] 
 
    resources :courses, only: [:index, :show]  
 
    # etc... 
 

 
    end

Auch hier ist der Code es zeigt mir:

if options.empty? 
 
      recipient.send(method, *args) 
 
    else 
 
      recipient.send(method, *args, options) 
 
    end

und erste Zeile von Log:

actionpack (4.2.4) lib/action_dispatch/routing/polymorphic_routes.rb:220:in `polymorphic_method'

Jedes Mal, wenn ich lobe after_sign_in_path_for ich in der Lage bin zu unterzeichnen. Wenn ich Inhalte after_sign_in_path_for kommentieren, aber after_sign_in_path_for Methode, bekomme ich diesen Fehler auch leer lassen.

EDIT: Ich habe getestet, dass ich nicht auch angemeldet bin, nicht nur nicht umgeleitet. Ich denke, Fehler passiert direkt im Call After_sign_in_path_for, nicht in der redirect_to oder was auch immer. Wahrscheinlich hat es etwas mit Ressource zu tun.

EDIT2: hier sind meine Harke Routen:

new_user_session GET /users/sign_in(.:format)   devise/sessions#new 
 
      user_session POST /users/sign_in(.:format)   devise/sessions#create 
 
    destroy_user_session DELETE /users/sign_out(.:format)   devise/sessions#destroy 
 
      user_password POST /users/password(.:format)   devise/passwords#create 
 
     new_user_password GET /users/password/new(.:format)  devise/passwords#new 
 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
 
         PATCH /users/password(.:format)   devise/passwords#update 
 
         PUT /users/password(.:format)   devise/passwords#update 
 
cancel_user_registration GET /users/cancel(.:format)   registrations#cancel 
 
     user_registration POST /users(.:format)     registrations#create 
 
    new_user_registration GET /users/sign_up(.:format)   registrations#new 
 
    edit_user_registration GET /users/edit(.:format)    registrations#edit 
 
         PATCH /users(.:format)     registrations#update 
 
         PUT /users(.:format)     registrations#update 
 
         DELETE /users(.:format)     registrations#destroy 
 
     user_confirmation POST /users/confirmation(.:format)  devise/confirmations#create 
 
    new_user_confirmation GET /users/confirmation/new(.:format) devise/confirmations#new 
 
         GET /users/confirmation(.:format)  devise/confirmations#show 
 
       admin_root GET /        rails_admin/main#dashboard 
 
      student_root GET /        feeds#index 
 
        feeds GET /feeds(.:format)     feeds#index 
 
       courses GET /courses(.:format)    courses#index 
 
        course GET /courses/:id(.:format)   courses#show 
 
       schools GET /schools(.:format)    schools#index 
 
        school GET /schools/:id(.:format)   schools#show 
 
      universities GET /universities(.:format)   universities#index 
 
       university GET /universities/:id(.:format)  universities#show 
 
      rails_admin  /admin       RailsAdmin::Engine 
 
         POST /graphql(.:format)    graphql#create 
 
    landing_confirmation GET /landing/confirmation(.:format) landing#confirmation 
 
    landing_access_denied GET /landing/access_denied(.:format) landing#access_denied 
 
        root GET /        landing#index

EDIT3: hier ist mein GitHub Repo:

https://github.com/yerassyl/nurate

+0

Können Sie current_user in after_sign_in bekommen? –

+0

@ChakreshwarSharma, auch wenn ich den Inhalt von after_sign_in_path_for kommentiere, bekomme ich diesen Fehler. – yerassyl

+0

entfernen Sie den Inhalt der Methode & write logger.info ("current_user =" + current_user.to_json) super, was ist die Ausgabe, die Sie nach diesem erhalten –

Antwort

-1

Stellen Sie sicher, dass‘ ve bekam ein Verfahren auf AplicationController wie folgt

def after_sign_in_path_for(resource) 
    resource.next_step 
end 

Next_step ein Attribut in der Aufzeichnung während seiner Erstellung gespeichert ist, Sie zu hart Code hier einen anderen Weg entscheiden können.

1
def after_sign_in_path_for(resource) 
if current_user.has_role?(:admin) 
    dashboard_path 
elsif current_user.has_role?(:student) 
    root_path 
else 
    root_path 
end 
end 

Versuchen Sie, eine andere Bedingung in Ihrem Code hinzuzufügen. Das hat für mich funktioniert. Ich habe so etwas verpasst.

0

Ich bin sicher, dass der Fehler bis jetzt gelöst worden sein muss. Ich verfolge es heute und um andere zu benachrichtigen und anderen mitzuteilen (wenn überhaupt), werde ich hier eine Antwort geben.

Dieser Fehler wird ausgelöst, wenn die Methode after_sign_in_path_for in Ihrer App neu definiert wird und den Wert nil zurückgibt. Wie pro meinem besten Gast, sofern das Snippet

def after_sign_in_path_for(resource) 
    if current_user.has_role?(:admin) 
    dashboard_path 
    elsif current_user.has_role?(:student) 
    root_path 
end 
end 

einen Fehler geben, weil keine der Bedingungen erfüllt wird immer zufrieden und damit der zurückgegebene Wert nil. Um einen solchen Fall zu vermeiden, können Sie immer eine else Bedingung hinzufügen, die erfüllt wird, wenn keine andere Bedingung erfüllt wird. Daher sollte das folgende Snippet funktioniert haben (und für andere Benutzer funktionieren wird).

Hoffe, das hilft jemandem. Prost :)

Verwandte Themen