views:

371

answers:

2

Hi all,

I am new to Rails and am just implementing some basic applications. Just starting on my second app and have run into what is a basic problem, but Google is yielding me nothing.

Getting this error:

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

Here is my routes.rb

Blah::Application.routes.draw do

resources :items, :cart, :user

Here is my applications.html.erb (the idea is this is a header of course, and i'm trying to create a link to 'login'. Right now it's just supposed to set the 'login' session variable to '1'.

<!DOCTYPE html>
<html>
<head>
  <title>Blah</title>

<%= stylesheet_link_tag :all %> <%= javascript_include_tag :defaults %> <%= csrf_meta_tag %>

<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>

And this is my 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

What am i missing in my routes.rb? Or otherwise...am sure it's something daft.

Thanks! Chris

A: 

Hi,

You need to add 'admin_login' method to routes, like:-

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

Thanks, Anubhaw

Anubhaw
so the automatic 'resources' route only handles 'index' and public facing methods to be accessed via html verbs?
Chris
Yes, the scaffold generated methods are added through resources.
Anubhaw
A: 

I recommend you to use new routing syntax:

resources :items, :cart

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

See Rails guides for more information about routing.

Semyon Perepelitsa