2011-09-11 126 views
0

我得到這個eror訪問URL http://localhost:3000/admin/login時: 的ActionController :: RoutingError在管理/登入#指數Rails的路由錯誤幫助沒有路由匹配

/app/views/admin/login/index.rhtml where line #18 raised: 

No route matches {:action=>"login_in_user", :controller=>"admin/login"} 

Extracted source (around line #18): 

15:  
16: <h2>Login</h2> 
17: <div class="spacer">&nbsp;</div> 
18: <%= form_tag(:action => "login_in_user") %> 
19: 
20: 
21: <p> 

這裏是我的控制器的管理員登錄控制器類/管理:

class Admin::LoginController < ApplicationController 

我的路由文件:

namespace :admin do 
    resources :login 
end 
match ':controller/service.wsdl', :action => 'wsdl' 

# Install the default route as the lowest priority. 
match ':controller/:action/:id' 

我有一個名爲動作:login_in_user

更新舊路由文件:

map.connect ':controller/service.wsdl', :action => 'wsdl' 

    # Install the default route as the lowest priority. 
    map.connect ':controller/:action/:id' 

回答

1

的問題是,你不必爲你想創建一個鏈接的url任何映射。 login_in_user不是標準資源操作之一,所以您需要明確添加它。你的情況相關routes.rb進入目前看起來是這樣的:

namespace :admin do 
    resources :login 
    # and other stuff... 
end 

,如果你做了這樣的事它可以工作:

namespace :admin do 
    resources :login do 
    collection do 
     post :login_in_user 
    end 
    end 

但是,請記住,資源不是很適合所有控制器。創建resources條目會生成映射到七個特定操作的路由,適合管理資源。一個名爲「login_in_user」的動作的「LoginController」聽起來不像我的資源。有可能你只是試圖創建一個具有特定路徑的控制器來通過不同的方式登錄。在這種情況下,也許你可以創建這樣的路線:

namespace :admin do 
    post 'login/login_in_user'   => 'login#login_in_user' 
    post 'login/login_in_some_other_way' => 'login#login_in_some_other_way' 
    # ... 
end 

你的其他一些路線對我來說似乎有點偏離。如果你還沒有,我強烈推薦閱讀這個導軌指南:http://guides.rubyonrails.org/routing.html

編輯

有一件事我要以防萬一說明的是,軌道不會允許訪問控制器的動作自動。您始終需要在路徑文件中爲用戶需要訪問的每個網址輸入一個條目。你的情況,你有看起來像這樣的底部一個簡單的包羅萬象的規則:

# Install the default route as the lowest priority. 
match ':controller/:action/:id' 

這是不推薦了,因爲它提供了太多的行動不必要的訪問,並在訪問方法沒有限制( GET,POST等)。即便如此,如果你想要一個包羅萬象的途徑安裝到你的管理界面,你可以做同樣的在你的:admin命名空間:

namespace :admin do 
    match ':controller/:action/:id' 
end 

這應該在這種情況下,解決你的問題,但同樣,它通常是不一個好主意。我的印象是,你正在處理遺留代碼,所以這可能是一個合理的臨時修復,但我仍然會先手工創建所有必要的路線,然後考慮如何重寫控制器以便合理地工作資源。正如我上面提到的,對於你的問題,這應該是訣竅:

namespace :admin do 
    post 'login/login_in_user' => 'login#login_in_user' 
end 
+0

我已經更新了我的問題,從舊的路徑文件從rails 1.2.6。你知道一個聰明的方法來重寫它嗎? –

+0

我已經更新了我的答案,但我不確定我是否理解你問的問題。 –

相關問題