Ruby on rails“没有路由匹配”

时间:2010-09-21 04:45:28

标签: ruby-on-rails ruby-on-rails-3

我是Rails的新手,我只是实现了一些基本的应用程序。刚开始使用我的第二个应用程序并遇到了什么是基本问题,但Google并没有让我感到满意。

出现此错误:

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

这是我的routes.rb

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

这是我的applications.html.erb(想法是这当然是一个标题,我正在尝试创建一个'登录'链接。现在它只是设置'登录'会话变量为'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中缺少什么?或者其他......我确定这是愚蠢的事情。

5 个答案:

答案 0 :(得分:20)

对于Rails&gt; 3您应该使用新的路由语法:

resources :items, :cart

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

有关路由的详情,请参阅Rails guides

答案 1 :(得分:6)

您需要向路线添加admin_login方法,例如: -

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

答案 2 :(得分:2)

找到“config / routes.rb”文件,编辑,找到以下行:

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

在此行中添加以下行,如下所示:

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

答案 3 :(得分:1)

你可以使用

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

此调用的默认方法是post,您可以使用

更改方法行为
:via => [:post/:put/:get]

答案 4 :(得分:0)

Rails 3中有一种新方法。您可以使用以下方法:

{{1}}