2010-10-26 14 views
8

Estoy usando Rails y quiero usar contraint en ruta para excluir esa ruta si la palabra clave "incidente" está en algún lugar de la url.Agregar restricción a la ruta para excluir cierta palabra clave

Estoy usando rails3.

Aquí están mis rutas existentes.

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

Necesito poner algo en restricciones para que no coincida si la palabra "incidente" está allí.

Gracias

Respuesta

7

En lugar de doblar las expresiones regulares de manera que no se pretende que, sugiero este enfoque en su lugar:

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 
    ... 

Es mucho más prolija, pero al final más elegante creo.

1

Adición en @Johannes respuesta para carriles 4.2.5:

config/routes.rb (al final muy)

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

config/inicializadores/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 
Cuestiones relacionadas