2012-08-07 45 views
0

我想要做幾個小時的事情,並且我堅持使用rails路線。Ruby on Rails自定義路由或如何在初始化控制器之前獲取request.request_url

所以..這個想法是有一些更便於用戶使用的網址,比如/類別爲筆記本電腦和/筆記本電腦/ Apple-MacBook-Air-and-on-on。我也應該使用像/ MyDummyPage等簡單頁面的鏈接。

所以我的想法是獲取request_url並檢查我是否可以自己找到頁面。但是,在定義路由之後,在調用控制器之前,似乎rails正在初始化這個請求類。

正如您所看到的,我被卡住了,無法爲我的問題看到任何可能的解決方案。 如果有人能幫助我,我會很高興。

預先感謝您。 一切順利!

+0

你能發表一些代碼嗎?您的routes.rb文件將很好啓動。 – JGrubb 2012-08-07 12:11:38

+0

我的路線是無用的。這是想法: 1)我將query_string傳遞給模型(URL映射器) 2)它返回控制器和動作 我找到了一種方法來做到這一點,通過簡單地創建每個單一的可能性使用每個例如。對於每個類別我創建一個馬赫 但是這種方式真的很慢,因爲每次我點擊鏈接時都會產生匹配。可能這不會發生在使用乘客的生產中,但我不能承擔這種風險。 你有沒有嘗試過這樣的事情? – 2012-08-07 15:34:40

+0

我不明白你爲什麼認爲你的路線是無用的。您不應該循環遍歷每個可能的類別來查找匹配,這就是路由文件的用途,類似於'get':路徑文件中的category'=>'products#category''應該可以讓您到達那裏。問題是路由文件是從上到下讀取的,因此當您想要更符合用戶需求的標準URL或更少的標準URL進行匹配時,請牢記這一點。 – JGrubb 2012-08-07 17:32:54

回答

0

(修訂整件事)

如果你想允許動態的匹配與正常寧靜的行車路線,有幾個選項 - (把它放在你的路由年底或者它會匹配一切)

match '*raw' => 'dynamic#show' 

而且在dynamic_controller.rb

def show 
    parts = params[:raw].split '/' 
    # do logic here to set all variables used in views 
    render @resource_or_page 
end 

你也可以使用輸入的搜索功能和重定向到搜索的第一個結果。如果沒有結果,則返回404。

def show 
    results = search_method_here params[:raw].sub('/', ' ') 
    if results.any? 
    redirect_to results.first   
    else 
    raise ActionController::RoutingError.new 'Not Found' 
    end 
end 

而且,寧靜的路線內freindlier網址,試試這個:https://github.com/norman/friendly_id


我認爲它必須認識到,人們一般不用手操作的URL,其不錯的可讀性但對於他們要清楚他們在做什麼/去哪裏,他們更重要。

爲了迴應您的評論,我認爲您誤導了路由。如果您製作了兩條路線:category:page,則它們與完全相同的網址匹配,但其中一條將其存儲在params[:category]中,另一個存儲在params[:page]中。爲了區分它,您需要具有不同數量的參數,比如:category/:product或命名空間,或者可能是指定路由路由到的MVC的安靜路由。

+0

您的解決方案的問題是我無法將這個mach用於類別和頁面。我想排除關鍵字和id,所以如果我都匹配':category(/:product)'並匹配':page',它將只加載頁面或類別。 – 2012-08-07 15:39:04

+0

是否有可能執行搜索查詢並執行我想要的控制器而無需重定向和切換url? – 2012-08-08 07:08:32

+0

好的答案再次編輯。我認爲那就是你想要的嗎? – AJcodez 2012-08-08 08:03:41