2013-08-22 40 views
7

Tôi vừa cài đặt Devise trên ứng dụng của mình, trước đây tôi đã thực hiện nó bằng đầu như hướng dẫn của Michael Hartl.Không phù hợp với tuyến đường [POST] "/ phiên/người dùng"

Hiện tại tôi có thể đăng ký và đăng xuất. Nhưng khi tôi đăng nhập vào nó mang lại một lỗi:

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

nó xảy ra khi tôi bấm vào đăng nhập/Đăng nhập nút có hoặc không có (đúng) mật khẩu.

tập tin tuyến đường của tôi là:

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]

hình thức của tôi là mặc định từ 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 %> 

Hiện nay tôi không có bất kỳ mã trên phiên Bộ điều khiển cũng như Trình trợ giúp như trong hướng dẫn của Michael Hartl

tuyến cào của tôi liên quan đến phiên như sau:

  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]

tôi cập nhật các tuyến đường nộp

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

Tôi có thể xem biểu mẫu của bạn và phương pháp điều khiển tương ứng không? – godzilla3000

+0

Tôi vừa chỉnh sửa tệp để bao gồm biểu mẫu, nhưng đó là biểu mẫu mặc định phát sinh. Trình điều khiển phiên của tôi hiện không có bất kỳ mã nào – tvieira

+1

@TiagoOrnelasVieira Tôi rất vui vì bạn đã có thể giải quyết vấn đề của mình. Nếu bạn có thể chấp nhận giải pháp cho bạn câu trả lời hoặc gửi câu trả lời mà bạn tự tìm thấy và kiểm tra nó, nó sẽ giúp những người xem câu hỏi của bạn. Nếu bạn không thực sự biết làm thế nào để giải thích lý do tại sao giải pháp của bạn làm việc sau đó yêu cầu chúng tôi và có thể ai đó sẽ đưa ra một lời giải thích lý do tại sao giải pháp của bạn cố định vấn đề của bạn. Một khi bạn hoặc ai đó đã trả lời câu hỏi một cách hoàn toàn, vui lòng cho nó dấu kiểm để điều này sẽ bị đóng và do đó Stack Overflow sẽ được giữ gọn gàng và súc tích. Cảm ơn. – DutGRIFF

Trả lời

9

Thêm các dòng sau đây trong tập tin tuyến đường

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

Cũng loại bỏ match ':controller(/:action(/:id(.:format)))' -> gây ra một cuộc xung đột trong các phiên bản sau

+0

Điều này có thể đã giải quyết được vấn đề nhưng bạn có thể giải thích chính xác nó là gì không. Tôi nghĩ nó giống như trận đấu. Tôi biết trong đường ray 4.0.0+ bạn không thể sử dụng 'match' mà không có' thông qua: [: get,: post] ',' thông qua:: all' hoặc 'via:' bất cứ điều gì nhưng khác hơn thế, tôi không xem điều này giúp ích như thế nào. Ngoài ra nó đang làm điều này cho mọi quyền điều khiển? Vì vậy, điều này có thể gây ra vấn đề sau này? –

+0

Tôi thực sự không biết tại sao trận đấu không hoạt động đối với tôi, nhưng khi tôi thay thế nó trong các tệp tuyến đường với các định nghĩa nhận và đăng riêng thì nó dường như hoạt động. Đây có thể không phải là giải pháp chính xác, nó có thể gây ra các vấn đề sau này (không có gì tôi gặp phải) nhưng nó sẽ giúp nếu bạn viết định nghĩa tuyến đường theo cách thủ công khi trang xung đột rake xuất hiện. –

+0

bạn là người đàn ông tommy .. –

0

Trong giao diện sessions/new, kiểm tra liên kết bạn đã bao gồm trong nút đăng nhập. Có thể bạn có user thay vì :user hoặc lỗi đánh máy tương tự đi sai đường dẫn. Ngoài ra, kiểm tra đầu ra của $ rake routes - là nút đăng nhập có trỏ đến đường dẫn tồn tại không? Bạn đã thực hiện một số tuyến đường có tên trong số routes.rb chưa?

Trong hướng dẫn Hartl, nếu bạn đã theo mặc định, khi bạn đăng nhập vào nó nên được chỉ đạo từ bạn

sessions#new để users#show (các user_path)

+0

Tôi sửa chữa nó. Tôi phù hợp với phiên/tuyến đường người dùng với việc tạo/phiên # tạo qua bài đăng – tvieira

+1

tuyệt vời, rất vui vì bạn đã làm việc đó! – dax

5

Một giải pháp khả thi mà tôi đưa ra là:

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

Tôi đã chỉ dành thời đại cố gắng giải quyết cùng một vấn đề như câu hỏi này. Giải pháp này đã cứu tôi khỏi phải đổi tên một mô hình hiện có được gọi là 'phiên' sang một cái gì đó khác, đó là những gì có vẻ như cách duy nhất để sửa chữa nó đúng cách ... may mắn là nó không phải. – australis