繁体   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