路由错误没有路由匹配[POST]“/ sessions / new”

时间:2012-11-12 00:28:08

标签: ruby-on-rails ruby routing ruby-on-rails-3.2

我有一个错误,并希望有人可以提供帮助,并给我一些线索如何处理这个问题。我有选择地跟踪敏捷开发书,当我复制他们的代码时,结果如下:

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,因此非常感谢你的帮助 - 我一直在试图弄明白,但我无法做到。

2 个答案:

答案 0 :(得分:1)

您目前正在发布到表单所在的同一页面。 由于您的视图是new控制器中的sessions操作,因此它会向POST提交sessions/new。然后Rails正在寻找POSTsessions#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代码?