2011-09-18 41 views
0

所以我使用虛榮寶石處理我的URL中的所有params[:vname],並重定向到大多數vnames的正確位置。如何在使用虛榮寶石時爲我的路線文件中的某些虛榮名稱添加例外?

但我只是通過Omnipopulus添加身份驗證 - https://github.com/icelab/omnipopulus - 它需要我去`mydomain.com/login'。

但是,當我這樣做,它將它發送到我的Vanities控制器。下面是請求的日誌:

Started GET "/login" for 127.0.0.1 at 2011-09-18 16:39:15 -0500 
    Processing by VanitiesController#show as HTML 
    Parameters: {"vname"=>"login"} 
    Vanity Load (0.1ms) SELECT "vanities".* FROM "vanities" WHERE "vanities"."name" = 'login' LIMIT 1 
Rendered public/404.html within layouts/application (0.0ms) 
Completed 404 Not Found in 13ms (Views: 11.5ms | ActiveRecord: 0.3ms) 

Vanities控制器做什麼,是當它到達一個網址爲mydomain.com/vname它檢查是否一個vname記錄存在於PARAMS的值(通常是用戶名)。如果它找到一個,它會重定向到該用戶的顯示操作。但考慮到login不是用戶和用戶名,它不應該處理該關鍵字的路由。

如何添加異常?

這是Vanities控制器的路線:我從來沒有使用過(甚至聽說過),在此之前的寶石

controller :vanities do 
    match ':vname' => :show, :via => :get, :constraints => {:vname => /@?[A-Za-z0-9\-\+]+/}, :as => :vanity 
    end 

回答

0

,但看它的源代碼,請參閱: https://github.com/icelab/omnipopulus/blob/master/config/routes.rb

這似乎將自身安裝爲Rails引擎,因此不在您的routes.rb文件中。我在想這裏可能有幾件事要測試。

首先,要明白虛空的路線必須是您的路線文件中的絕對死路線。這裏發生的事情是,當你調用/登錄時,虛擬路由發生在你的認證gem路由被調用之前。通常我只是說,「將虛擬路由移動到routes.rb中的最後一個路由」,但是鑑於它是基於它的引擎注入其全部路由,這可能是不夠的。

我看到解決這個的兩種可能的方式:

  1. 退房的Gemfile並確保面盆加載後omnipopulous。
  2. 如果失敗了,請將我上面發佈的鏈接中的路由複製到路由器之前的routes.rb中。

我看到#2作爲一個醜陋的黑客攻擊,所以我真的希望先1號作品(取決於加載順序與捆綁的寶石,我認爲這會自上而下的,但我沒有任何證據到目前爲止)。

+0

虛榮路線絕對是最後一個。我在無所不在的時候移動了寶石電話,並做了「捆綁更新」,但這似乎不起作用。我會嘗試將路線複製到路線文件並查看。我也問了寶石作者是否應該在我的'routes.rb'文件中放置一個路由,因爲它不會。 – marcamillion

+0

它似乎複製從github回購到我的'routes.rb'作品的路線。謝謝! – marcamillion