簡體   English   中英

使用Vanity gem時,如何為我的路由文件的某些虛榮名稱添加例外?

[英]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中的最后一條”,但是鑒於全民根據其引擎注入其路線,這可能還不夠。

我看到兩種可能的解決方法:

  1. 簽出Gemfile並確保在無數之后加載了Vanities。
  2. 如果失敗,則將我在上面發布的鏈接中的路由復制到虛榮路由之前。

我認為#2是一個丑陋的駭客,所以我真的希望#1首先工作(取決於捆綁器中寶石的加載順序,我認為這種加載方式將自上而下,但到目前為止,我還沒有任何證據)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM