2010-09-21 4 views
10

Sono nuovo di Rails e sto solo implementando alcune applicazioni di base. Ho appena iniziato la mia seconda app e mi sono imbattuto in quello che è un problema di base, ma Google non mi cede nulla.Ruby on rails "Nessuna corrispondenza corrisponde"

questo errore:

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

Ecco il mio routes.rb

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

Ecco il mio applications.html.erb (l'idea è che questo è un colpo di testa, naturalmente, e sto cercando di creare un collegamento a "login". In questo momento è solo possibile impostare la variabile di sessione "login" su "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> 

E questo è il mio 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 

Cosa mi manca nella mia routes.rb? O altrimenti ... sono sicuro che sia qualcosa di sciocco.

risposta

6

è necessario aggiungere admin_login metodo per itinerari, come: -

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

quindi percorso il 'risorse automatizzati maniglie 'indice' e metodi di pubblico di fronte a cui accedere tramite i verbi html? – Chris

+1

Sì, i metodi generati dallo scaffold vengono aggiunti tramite le risorse. – Anubhaw

19

Per Rails> 3 si dovrebbe usare la nuova sintassi di routing:

resources :items, :cart 

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

Vedi Rails guides Per ulteriori informazioni sul routing.

2

find “config/routes.rb” File, Modifica, Individuare la seguente riga:

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

In questa linea aggiungere la seguente riga, come segue:

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

è possibile utilizzare

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

il metodo predefinito per questa chiamata è post u può modificare il comportamento del metodo utilizzando

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

C'è un nuovo metodo in Rails 3. È possibile utilizzare il seguente:

get 'admin_login' => "user#admin_login"