2013-08-22 15 views
7

Właśnie zainstalowałem Devise na mojej aplikacji, wcześniej zrobiłem to od podstaw, jak samouczek Michaela Hartla.Żadne trasy nie pasują do [POST] "/ sessions/user"

Obecnie mogę się zarejestrować i wylogować. Ale kiedy ja zalogować daje błąd:

No route matches [POST] "/sessions/user"

zdarza się po kliknięciu na znak w dzienniku/w przycisk z lub bez (poprawnie) hasło.

Mój plik trasa:

SampleApp::Application.routes.draw do 
devise_for :users, path_names: { sign_in: "login", sign_out: "logout"} 

resources :users do 
    resources :bookings, only: [:show] 
    end 
resources :bookings 
resources :sessions 

# match '/signup', to: 'devise/registrations#new', via: :get 
# match '/signin', to: 'devise/sessions#new', via: [:post, :get] 
# match '/signout', to: 'devise/sessions#destroy', via: :delete 
match '/admin', to: 'admin#new', via: :get 
match "bookings/new", to: 'bookings#new', via: [:post, :get] 

devise_scope :user do 
    root to: 'static_pages#home' 
end 

[EDIT]

Moja forma jest domyślnym od devise:

<h2>Sign in</h2> 

<%= form_for(resource, :as => resource_name, :url => session_path(resource_name)) do |f| %> 
    <div><%= f.label :email %><br /> 
    <%= f.email_field :email, :autofocus => true %></div> 
    <div><%= f.label :password %><br /> 
    <%= f.password_field :password %></div> 
    <% if devise_mapping.rememberable? -%> 
    <div><%= f.check_box :remember_me %> 
    <%= f.label :remember_me %></div> 
    <% end -%> 
    <div><%= f.submit "Sign in" %></div> 
<% end %> 

Obecnie nie mam żadnego kodu na sesję Kontroler lub pomocnik, jak w poradniku Michaela Hartla

Moje trasy natarcia dotyczące sesji są następujące:

  sessions GET  /sessions(.:format)     sessions#index 
        POST  /sessions(.:format)     sessions#create 
     new_session GET  /sessions/new(.:format)    sessions#new 
     edit_session GET  /sessions/:id/edit(.:format)   sessions#edit 
      session GET  /sessions/:id(.:format)    sessions#show 
        PATCH /sessions/:id(.:format)    sessions#update 
        PUT  /sessions/:id(.:format)    sessions#update 
        DELETE /sessions/:id(.:format)    sessions#destroy 

[SOLVED]

zaktualizowałem trasy złożyć

devise_scope :user do 
    root to: 'static_pages#home' 
    match '/sessions/user', to: 'devise/sessions#create', via: :post 
    end 
+0

widzę swoją formę i odpowiedniej metody kontroler? – godzilla3000

+0

Właśnie edytowałem plik, aby dołączyć formularz, ale jest to domyślny formularz. Mój kontroler sesji obecnie nie ma żadnego kodu – tvieira

+1

@ TiagoOrnelasVieira Cieszę się, że udało Ci się rozwiązać twój problem. Jeśli mógłbyś zaakceptować rozwiązanie, które dało ci odpowiedź lub przesłać odpowiedź, którą sam znalazłeś i dał ci czek, który pomógłby ci w przejrzeniu twojego pytania. Jeśli nie wiesz, jak wyjaśnić, dlaczego Twoje rozwiązanie zadziałało, zapytaj nas, a może ktoś wyjaśni, dlaczego Twoje rozwiązanie rozwiązało problem. Gdy Ty lub ktoś odpowiedziałeś na to pytanie w całości, nadaj mu znacznik wyboru, aby został on zamknięty, a więc Stack Overflow będzie utrzymywany w porządku i zwięzły. Dzięki. – DutGRIFF

Odpowiedz

9

Dodaj następujące wiersze w pliku tras

post ':controller(/:action(/:id(.:format)))' 
get ':controller(/:action(/:id(.:format)))' 

usunąć także match ':controller(/:action(/:id(.:format)))' -> powoduje konflikt w późniejszych wersjach

+0

To mogło rozwiązać problem, ale możesz wyjaśnić, co dokładnie to oznacza. Myślę, że robi to samo, co mecz. W wersjach 4.0.0+ nie można używać 'match' bez' via: [: get,: post] ',' via:: all' lub 'via:' cokolwiek poza tym, nie zobacz, jak to pomaga. Czy robi to również dla każdego kontrolera? Czy może to później powodować problemy? –

+0

Naprawdę nie wiem, dlaczego mecz nie działa dla mnie, ale kiedy zastąpiłem go w pliku tras z definicjami get i post osobno, wydawało się, że działa. To może nie być dokładna soloution, może to powodować problemy później (żaden nie spotkałem), ale to pomaga, jeśli ręcznie wpisujesz definicje tras, gdy pojawi się strona konfliktu trasy rake. –

+0

jesteś mężczyzną tommy .. –

0

W widoku sessions/new, sprawdź link już uwzględnione w przycisk logowania. Możliwe, że masz user zamiast :user lub podobną literówkę, która idzie na niewłaściwą ścieżkę. Sprawdź także dane wyjściowe z $ rake routes - czy przycisk logowania wskazuje na istniejącą ścieżkę? Czy zrobiłeś kilka nazwanych tras w routes.rb?

W tutorialu Hartl, jeśli już po domyślne, po zalogowaniu się w niej należy kierowanie z

sessions#new do users#show (w user_path)

+0

Naprawię to. Dopasowuję sesje/trasę użytkownika do devise/sessions # create via post – tvieira

+1

fajnie, cieszę się, że to działa! – dax

5

Możliwym rozwiązaniem wymyśliłem to:

devise_scope :user do 
    root to: 'static_pages#home' 
    match '/sessions/user', to: 'devise/sessions#create', via: :post 
    end 
+0

Właśnie spędziłem wieki próbując rozwiązać ten sam problem, co to pytanie. To rozwiązanie uratowało mnie przed koniecznością zmiany nazwy istniejącego modelu o nazwie "sesja" na coś innego, co wydawało się jedynym sposobem, aby naprawić to poprawnie ... na szczęście tak nie było. – australis

Powiązane problemy