2012-11-12 38 views
1

我有一个错误,希望有人可以帮助,并给我一些线索如何处理这个。我在选择的方式如下敏捷开发的书,虽然我复制了他们的代码,结果如下:路由错误没有路由匹配[邮政]“/会议/新”

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 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,因此会很感激你的帮助 - 我一直在努力弄清楚自己,但我无法做到。

回答

1

您目前正在发布到表单所在的同一页面。 由于您的视图是sessions控制器中的new操作,因此它将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,这将给你如何轨路由的作品更好的概述。

编辑: 我刚才看到你很可能重新提交到/登录,然后应该工作... 我认为它还是会默认为提交然而,当前的动作是正式会议/新,所以你可以给我的建议去看看它是否有所作为?

0

运行'耙路线'时会得到什么?你能复制那个吗?另外,你能否复制表单浏览器呈现的HTML代码?