2010-10-26 58 views
8

我正在使用Rails,並且我想在路由中使用contraint來排除該路由,如果關鍵字「incident」在url中的任何位置。添加約束到路由以排除某些關鍵字

我正在使用rails3。

這是我現有的路線。

match ':arg', :to => "devices#show", :constraints => {:arg => /???/} 

我需要把一些東西放在限制中,以便它不匹配,如果單詞「事件」在那裏。

感謝

回答

7

而是彎曲的正則表達式的方式是不打算的,我建議這種方法代替:

class RouteConstraint 
    def matches?(request) 
    not request.params[:arg].include?('incident') 
    end 
end 

Foo::Application.routes.draw do 
    match ':arg', :to => "devices#show", :constraints => RouteConstraint.new 
    ... 

它的很多更詳細的,但最終更優雅,我認爲。

1

添加到@Johannes答案鋼軌4.2.5:

配置/ routes.rb中(在最後)

constraints(RouteConstraint) do 
    get "*anythingelse", to: "rewrites#page_rewrite_lookup" 
end 

配置/初始化/ route_constraint.rb

class RouteConstraint 
    def self.matches?(request) 
    not ["???", "Other", "Engine", "routes"].any? do |check| 
     request.env["REQUEST_PATH"].include?(check) 
    end 
    end 
end