【发布时间】:2014-11-11 08:10:08
【问题描述】:
我正在关注 Rails 4 In 操作手册,但遇到以下错误:
No route matches [POST] "/sessions/new"
我不知道为什么,因为我已经按照教程完成了 T。这让我相信教程本身存在缺陷。无论如何,由于某种原因,当它应该发布到会话#create 时,它会发布到会话#new。我做错了什么?
sessions_controller.rb
class SessionsController < ApplicationController
def new
end
def create
user = User.where(:name => params[:signin][:name]).first
if user && user.authenticate(params[:signin][:password])
session[:user_id] = user.id
flash[:notice] = "Signed in successfully."
redirect_to root_url
else
flash[:error] = "Sorry."
render :new
end
end
end
sessions/new.html.erb
<h1>Sign in</h1>
<%= form_for :signin, method: "POST" do |f| %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :password %><br />
<%= f.password_field :password %>
</p>
<%= f.submit "Sign in" %>
<% end %>
routes.rb
get "/signin", to: "sessions#new"
post "/signin", to: "sessions#create"
【问题讨论】:
-
您应该需要指定 form_for 是一种 POST 方法 - 默认情况下它们是发布的,我会尝试删除它。其次,通常你只写“method::post”而不是“POST”)。注意:这可能会也可能不会解决您的问题,但值得一试。
-
第三,
:signin和"/signin"之间有天壤之别——试试后者 -
感谢@TarynEast,不幸的是,尽管上述方法都没有解决问题。
-
好的,接下来 - 您正在窗口中运行您的服务器,对吧?点击“登录”按钮,向我们展示点击后该窗口中记录的确切内容。
-
另外,在您的浏览器中,右键单击并检查表单,查看实际为表单呈现的 html
标签: ruby-on-rails ruby ruby-on-rails-4