2010-09-21 26 views
10

Soy nuevo en Rails y solo estoy implementando algunas aplicaciones básicas. Empecé con mi segunda aplicación y me encontré con un problema básico, pero Google no me está dando nada.Ruby on rails "No coincide la ruta"

conseguir este error:

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

Aquí está mi routes.rb

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

Aquí está mi applications.html.erb (la idea es que esto es un encabezado, por supuesto, y estoy tratando de crear un enlace para 'iniciar sesión'. Ahora mismo se supone que debe establecer la variable de sesión de 'inicio de sesión' en '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> 

y este es mi 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 

¿Qué me falta en mi routes.rb? O de lo contrario ... estoy seguro de que es algo tonto.

Respuesta

6

es necesario agregar admin_login método para rutas, como: -

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

así la ruta de los 'recursos' automáticas única 'índice' asas y métodos de revestimiento públicos para acceder a través de verbos html? – Chris

+1

Sí, los métodos generados por el andamio se agregan a través de los recursos. – Anubhaw

19

para los carriles> 3 se debe utilizar la nueva sintaxis de enrutamiento:

resources :items, :cart 

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

Ver Rails guides para obtener más información acerca del enrutamiento.

2

hallazgo “config/routes.rb” archivo, editar, Busque la línea siguiente:

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

En esta línea añadir la siguiente línea, de la siguiente manera:

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

puede utilizar

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

método predeterminado para esta llamada es publicar puede cambiar el comportamiento del método utilizando

:via => [:post/:put/:get] 
0

Hay un nuevo método en Rails 3. Puede utilizar el siguiente:

get 'admin_login' => "user#admin_login"