2008-11-16 21 views
0

好自定義紅寶石路線,這兩個相關的問題是在參考Railscast #21在型號

我遇到一些麻煩路線。兩個問題:

1)本教程中的路由似乎是相對於應用程序的根;我希望他們是相對於模型的根源。所以

http://example.com/login」我需要是「http://example.com/model/login」(反之亦然註銷)。

我正在使用固定鏈接來引用我的記錄,我不知道如何指定覆蓋,因爲每次我嘗試使用「http://example.com/model/login」時出現錯誤,表示找不到記錄「登錄」。我怎樣才能覆蓋這個登錄/註銷?

2)去我的自定義路由似乎並沒有保留在我的地址欄中的自定義路由。所以去「http://example.com/login」讓我到右頁,但瀏覽器現在在地址欄中說「http://example.com/session/new」。在教程中,這不會發生:應用程序提供正確的頁面並將自定義路線保留在地址欄中。我怎麼能得到這個發生在我身上?

## Sessions Controller 
class SessionController < ApplicationController 
    def create 
    session[:password] = params[:password] 
    flash[:notice] = "Successfully Logged In" 
    redirect_to :controller => 'brokers', :action => 'index' 
    end 

    def destroy 
    reset_session 
    flash[:notice] = "Successfully Logged Out" 
    redirect_to login_path 
    end 
end 

## Routes 
ActionController::Routing::Routes.draw do |map| 
    map.resources :brokers, :session 
    map.login 'login', :controller => 'session', :action => 'create' 
    map.logout 'logout', :controller => 'session', :action => 'destroy' 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 
end 

回答

0

你是什麼意思與「模型的根」?您應該使路線控制器和他們的動作。控制器應該與型號進行通信。

錯誤信息可能會有點混亂,但據我所看到的,這個網址:

http://example.com/model/login

會打電話叫登錄名爲模型與控制器的動作空ID(至極可能不存在),使用這條路線:

map.connect ':controller/:action/:id'

如果你婉在你的路由中有一個「子文件夾」,你可以使用命名空間,我不記得它的每一個細節,但你可以找到關於它的很多信息here。一句警告:命名空間使得路由調試更加困難,我有很多有趣的事情搞清楚這個路由是否真的被使用。我最終創建了許多非常具體的路線,以確保使用正確的路線。