[英]How do I add an exception to my route file for some vanity names when using the Vanity gem?
因此,我使用的是Vanity gem,它處理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
控制器的作用是,當它獲取URL作為mydomain.com/vname
它將檢查以查看是否存在參數中的值(通常是用戶名)的vname
記錄。 如果找到一個,它將重定向到該用戶的show操作。 但鑒於login
既不是用戶也不是用戶名,則不應處理該關鍵字的路由。
如何添加例外?
這是Vanities
控制器的路線:
controller :vanities do
match ':vname' => :show, :via => :get, :constraints => {:vname => /@?[A-Za-z0-9\-\+]+/}, :as => :vanity
end
我以前從未使用過(甚至沒有聽說過)該gem,但查看其源代碼,請參閱: https : //github.com/icelab/omnipopulus/blob/master/config/routes.rb
這似乎是作為Rails引擎安裝的,因此實際上不在您的route.rb文件中。 我認為這里可能需要測試一些內容。
首先,認識到虛榮的路線必須是您的路線文件中的絕對死角。 這里發生的是,當您調用/ login時,將在調用身份驗證gem的路由之前進行虛榮路由。 通常,我只是說“將虛榮路線移至routes.rb中的最后一條”,但是鑒於全民根據其引擎注入其路線,這可能還不夠。
我看到兩種可能的解決方法:
我認為#2是一個丑陋的駭客,所以我真的希望#1首先工作(取決於捆綁器中寶石的加載順序,我認為這種加載方式將自上而下,但到目前為止,我還沒有任何證據)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.