我有一个错误,并希望有人可以提供帮助,并给我一些线索如何处理这个问题。我有选择地跟踪敏捷开发书,当我复制他们的代码时,结果如下:
Routing Error
No route matches [POST] "/sessions/new"
Try running rake routes for more information on available routes.
这就是我在routes.rb文件中的内容:
get 'admin' => 'admin#index'
controller :sessions do
get 'login' => :new
post 'login' => :create
delete 'logout' => :destroy
end
resources :users
在我的session_controller中: skip_before_filter:授权 def new 端
def create
user = User.find_by_name(params[:login_name])
if user and user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to admin_url
else
redirect_to login_url, alert: "Invalid user/password combination"
end
end
def destroy
session[:user_id] = nil
redirect_to users_url, notice: "Logged out"
end
在我的会话中#new.html.erb:
<% if flash[:alert] %>
<p id="notice"><%= flash[:alert] %></p>
<% end %>
<%= form_tag do %>
<fieldset>
<legend>Please Log In</legend>
<div>
<%= label_tag :login_name, 'Login name:' %>
<%= text_field_tag :login_name, params[:login_name] %>
</div>
<div>
<%= label_tag :password, 'Password:' %>
<%= password_field_tag :password, params[:password] %>
</div>
<div>
<%= submit_tag "Login" %>
</div>
</fieldset>
<% end %>
此外,我使用的是has_secure_password,最近更新为Ruby v 193和Rails 3.2.8。我只是在学习ROR,因此非常感谢你的帮助 - 我一直在试图弄明白,但我无法做到。
答案 0 :(得分:1)
您目前正在发布到表单所在的同一页面。
由于您的视图是new
控制器中的sessions
操作,因此它会向POST
提交sessions/new
。然后Rails正在寻找POST
到sessions#new
的路线。由于不存在,所以它是错误的。
但是,如果您查看路线,则可以看到您的post 'login' => :create
路线实际上是您为处理表单提交而设置的create
操作。因此,如果您将表单提交到/login
,该路线将很好地将所有内容发送到预期的操作。
为此,请更改:
<%= form_tag do %>
到
<%= form_tag('/login') do %>
此外,我强烈建议您阅读以下内容:http://guides.rubyonrails.org/routing.html,它可以让您更好地了解rails路由的工作原理。
修改强> 我刚刚看到你可能会重新提交/登录然后应该工作...... 我认为它仍然会默认提交到当前的操作,但这是正式的会话/新的,所以你能给我的建议一个去看看它是否有所作为?
答案 1 :(得分:0)
运行'rake routes'时你会得到什么?你能复制一下吗?另外,您是否可以复制表单浏览器呈现的HTML代码?