2010-10-26 29 views
8

Tôi đang sử dụng Rails và tôi muốn sử dụng đường viền trong tuyến đường để loại trừ tuyến đường đó nếu từ khóa "sự cố" ở bất kỳ đâu trong url.Thêm ràng buộc vào tuyến đường để loại trừ từ khóa nhất định

Tôi đang sử dụng đường ray3.

Đây là các tuyến đường hiện có của tôi.

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

Tôi cần đặt một thứ gì đó trong các ràng buộc sao cho nó không khớp với từ "sự cố" ở đó.

Cảm ơn

Trả lời

5
(?!.*?incident).* 

có thể là những gì bạn muốn.

Điều này về cơ bản là cùng một câu hỏi như How to negate specific word in regex?. Đến đó để có câu trả lời chi tiết hơn.

7

Thay vì uốn biểu thức thông thường một cách thức mà nó không có ý định, tôi đề nghị phương pháp này thay vì:

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

của nó rất nhiều tiết hơn, nhưng cuối cùng tao nhã hơn tôi nghĩ.

1

Thêm vào câu trả lời @ Johannes cho đường ray 4.2.5:

config/routes.rb (vào cuối RẤT)

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

config/initializers/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 
Các vấn đề liên quan