2010-09-21 171 views
10

我是Rails的新手,只是实现了一些基本的应用程序。刚开始我的第二个应用程序,并遇到了什么是一个基本问题,但谷歌没有让我什么。Ruby on rails“没有路线匹配”

收到此错误:

No route matches {:controller=>"user", :action=>"admin_login"} 

这里是我的routes.rb

Blah::Application.routes.draw do 
    resources :items, :cart, :user 
end 

这里是我的applications.html.erb(的想法是,这是当然的头,我试图创建一个'login'的链接,现在只需要将'login'会话变量设置为'1'

<!DOCTYPE html> 
<html> 
<head> 
    <title>Blah</title> 
    <%= stylesheet_link_tag :all %> 
    <%= javascript_include_tag :defaults %> 
    <%= csrf_meta_tag %> 
</head> 
<body> 

<div id="headerHolder"> 
    <div id="title">blah</div> 
    <div id="menu"> 
     <div class ="menuItem">blog</div> 
     <div class ="menuItem"> 
      <%= link_to "products", :controller => "items", 
            :action => "index" %> 
     </div> 
     <div class ="menuItem">contact</div>  
     <div class="menuItem"> 
      <%= link_to "cart", :controller => "cart", 
           :action => "index" %> 
     </div> 
     <div class="menuItem"> 
       <%= link_to_unless_current "admin", :controller => "user", 
                :action => "admin_login" %> 
     </div> 
    </div> 
</div> 

<div id="content"> 
    <%= yield %> 
</div> 

</body> 
</html> 

这是我user_controller.rb

class UserController < ApplicationController 

    def index 
    end 

    def admin_login 
    session[:login] = 1 
    session[:cart] = nil 
    flash[:notice] = "Admin user successfully logged in, cart reset." 
    redirect_to :controller => :items 
    end 

end 

我在我的routes.rb丢失了怎么办?否则......肯定这是愚蠢的。

回答

6

您需要admin_login方法添加到路线,如: -

map.connect '/user/admin_login', :controller => 'users', :action => 'admin_login' 
+0

所以自动“资源”路径只处理“索引”和面向公众的方法可以通过HTML动词访问? – Chris 2010-09-21 04:54:54

+1

是的,脚手架生成的方法是通过资源添加的。 – Anubhaw 2010-09-21 05:10:57

19

对于滑轨> 3,你应该使用新的路由语法:

resources :items, :cart 

resource :user do 
    # Route GET /user/admin_login 
    get 'admin_login', :on => :collection 
end 

有关路由的详细信息,请参阅Rails guides

2

找到“配置/ routes.rb中”文件,编辑,找到以下行:

# See how all your routes lay out with "rake routes" 

在这一行中添加以下行,如下所示:

map.connect '',:controller=>"index",:action=>"index" 
1

可以使用

match 'admin_login' => 'user#admin_login', :as =>'admin_login' 

此调用的默认方法是后u可以通过使用

来更改方法行为
:via => [:post/:put/:get] 
0

有一个在Rails的一种新方法3.您可以使用以下方法:

get 'admin_login' => "user#admin_login"