2010-09-21 37 views
10

Tôi mới sử dụng Rails và chỉ đang triển khai một số ứng dụng cơ bản. Chỉ cần bắt đầu vào ứng dụng thứ hai của tôi và đã chạy vào một vấn đề cơ bản là gì, nhưng Google đang cho tôi không có gì.Ruby on rails "Không có tuyến đường phù hợp"

Bắt lỗi này:

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

Đây là routes.rb tôi

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

Đây là tôi applications.html.erb (ý tưởng là đây là một tiêu đề tất nhiên, và tôi đang cố gắng để tạo ra một liên kết để 'đăng nhập'. Ngay bây giờ, bạn chỉ cần đặt biến phiên 'đăng nhập' thành '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> 

Và đây là user_controller.rb của tôi

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 

Tôi đang thiếu gì trong số routes.rb? Hay nói cách khác ... chắc chắn nó là một thứ gì đó.

Trả lời

6

Bạn cần phải thêm admin_login phương pháp để các tuyến đường, như: -

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

để định tuyến các 'tài nguyên' tự động chỉ xử lý 'index' và phương pháp phải đối mặt với công chúng được truy cập thông qua các động từ html? – Chris

+1

Có, các phương pháp tạo giàn giáo được thêm vào thông qua tài nguyên. – Anubhaw

19

Đối với Rails> 3 bạn nên sử dụng cú pháp định tuyến mới:

resources :items, :cart 

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

Xem Rails guides để biết thêm thông tin về định tuyến.

2

tìm “config/routes.rb” tập tin, chỉnh sửa, Xác định vị trí dòng sau:

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

Trong dòng này thêm dòng sau đây, như sau:

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

bạn có thể sử dụng

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

phương pháp mặc định cho cuộc gọi này là bài u có thể thay đổi hành vi của phương pháp bằng cách sử dụng

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

Có một phương pháp mới trong Rails 3. Bạn có thể sử dụng như sau:

get 'admin_login' => "user#admin_login" 
Các vấn đề liên quan