Ответ 1
Вам нужно добавить метод admin_login
к маршрутам, например: -
map.connect '/user/admin_login', :controller => 'users', :action => 'admin_login'
Я новичок в 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
? Или иначе... я уверен, что это что-то глупое.
Вам нужно добавить метод admin_login
к маршрутам, например: -
map.connect '/user/admin_login', :controller => 'users', :action => 'admin_login'
Для Rails > 3 вы должны использовать новый синтаксис маршрутизации:
resources :items, :cart
resource :user do
# Route GET /user/admin_login
get 'admin_login', :on => :collection
end
Подробнее о маршрутизации см. Rails guide.
найти файл config/routes.rb, изменить, найти следующую строку:
# See how all your routes lay out with "rake routes"
В этой строке добавьте следующую строку:
map.connect '',:controller=>"index",:action=>"index"
вы можете использовать
match 'admin_login' => 'user#admin_login', :as =>'admin_login'
метод по умолчанию для этого вызова: post u может изменять поведение метода с помощью
:via => [:post/:put/:get]
В Rails 3 есть новый метод. Вы можете использовать следующее:
get 'admin_login' => "user#admin_login"