Ruby on rails 没有与[POST]匹配的路线”/会话/用户“;
我刚刚在我的应用程序上安装了Desive,之前我像MichaelHartl教程一样,是从头开始安装的 目前我可以注册并注销。但当我登录时,会出现一个错误: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
没有路由匹配[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
tousers\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