Рубин на рельсах "Нет маршрутов"

Я новичок в Rails и просто реализую некоторые базовые приложения. Просто начиная с моего второго приложения и столкнувшись с тем, что является основной проблемой, но Google ничего не дает мне.

Получение этой ошибки:

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

Вот мои маршруты .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? Или иначе... я уверен, что это что-то глупое.

Ответ 1

Вам нужно добавить метод admin_login к маршрутам, например: -

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

Ответ 2

Для Rails > 3 вы должны использовать новый синтаксис маршрутизации:

resources :items, :cart

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

Подробнее о маршрутизации см. Rails guide.

Ответ 3

найти файл config/routes.rb, изменить, найти следующую строку:

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

В этой строке добавьте следующую строку:

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

Ответ 4

вы можете использовать

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

метод по умолчанию для этого вызова: post u может изменять поведение метода с помощью

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

Ответ 5

В Rails 3 есть новый метод. Вы можете использовать следующее:

get 'admin_login' => "user#admin_login"