我正在使用Rails,並且我想在路由中使用contraint來排除該路由,如果關鍵字「incident」在url中的任何位置。添加約束到路由以排除某些關鍵字
我正在使用rails3。
這是我現有的路線。
match ':arg', :to => "devices#show", :constraints => {:arg => /???/}
我需要把一些東西放在限制中,以便它不匹配,如果單詞「事件」在那裏。
感謝
我正在使用Rails,並且我想在路由中使用contraint來排除該路由,如果關鍵字「incident」在url中的任何位置。添加約束到路由以排除某些關鍵字
我正在使用rails3。
這是我現有的路線。
match ':arg', :to => "devices#show", :constraints => {:arg => /???/}
我需要把一些東西放在限制中,以便它不匹配,如果單詞「事件」在那裏。
感謝
而是彎曲的正則表達式的方式是不打算的,我建議這種方法代替:
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
...
它的很多更詳細的,但最終更優雅,我認爲。
添加到@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