Ruby on rails 没有与[POST]匹配的路线”/会话/用户“;

Ruby on rails 没有与[POST]匹配的路线”/会话/用户“;,ruby-on-rails,devise,ruby-on-rails-4,Ruby On Rails,Devise,Ruby On Rails 4,我刚刚在我的应用程序上安装了Desive,之前我像MichaelHartl教程一样,是从头开始安装的 目前我可以注册并注销。但当我登录时,会出现一个错误: 没有路由匹配[POST]“/sessions/user” 当我单击“登录/登录”按钮时,无论是否使用(正确)密码,都会发生这种情况 我的路由文件是: SampleApp::Application.routes.draw do devise_for :users, path_names: { sign_in: "login", sign_out

我刚刚在我的应用程序上安装了Desive,之前我像MichaelHartl教程一样,是从头开始安装的

目前我可以注册并注销。但当我登录时,会出现一个错误:

没有路由匹配[POST]“/sessions/user”

当我单击“登录/登录”按钮时,无论是否使用(正确)密码,都会发生这种情况

我的路由文件是:

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
[编辑]

我的表格是Deviate的默认表格:

<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 %>
[已解决]

我更新了路由文件

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

sessions/new
视图中,检查登录按钮中包含的链接。您可能有
user
而不是
:user
或类似的输入错误。还要检查
$rake routes
的输出-登录按钮是否指向存在的路径?您是否在
routes.rb
中制作了一些命名路由

在Hartl教程中,如果您遵循默认设置,那么当您登录时,它应该指导您从


sessions\new
to
users\show
(用户路径)

在路由文件中添加以下行

post ':controller(/:action(/:id(.:format)))'
get ':controller(/:action(/:id(.:format)))'
也删除
match':controller(/:action(/:id(:format))“
->在以后的版本中会导致冲突

我提出的一个可能的解决方案是:

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

我可以查看您的表单和相应的控制器方法吗?我刚刚编辑了文件以包含表单,但它是设计默认表单。我的会话控制器当前没有任何code@TiagoOrnelasVieira我很高兴你能解决你的问题。如果您可以接受给出答案的解决方案,或者提交您自己找到的答案并进行检查,这将有助于查看您的问题的人。如果你真的不知道如何解释为什么你的解决方案有效,那么问我们,也许有人会解释为什么你的解决方案解决了你的问题。一旦你或某人完全回答了问题,请给它打勾,这样它将被关闭,这样堆栈溢出将保持整洁和简洁。谢谢,我修好了。我将会话/用户路径与设计/会话#通过POST创建匹配这可能已经解决了问题,但您能否解释到底是什么原因。我认为它和match的功能是一样的。我知道在rails 4.0.0+中,如果没有
via:[:get,:post]
via::all
via:
等等,你就不能使用
match
,我看不出这有什么帮助。它对每个控制器都这样做,对吗?那么这会不会在以后引起问题呢?我真的不知道为什么match对我不起作用,但是当我在routes文件中将它分别替换为get和post定义时,它似乎起到了作用。这可能不是确切的解决方案,它可能会在以后引起问题(我没有遇到过),但如果您在rake route conflict(耙路由冲突)页面弹出时手动编写路由定义,它会有所帮助。我只是花了很多时间试图解决与此问题相同的问题。这个解决方案使我不必将一个名为“session”的现有模型重命名为其他模型,这似乎是正确修复它的唯一方法。。。谢天谢地,事实并非如此。
 devise_scope :user do 
    root to: 'static_pages#home'
    match '/sessions/user', to: 'devise/sessions#create', via: :post
  end