2011-09-01 27 views
6

Tôi đang sử dụng đường ray để bảo vệ quyền truy cập vào các tệp chỉ cần được phân phát cho một số người dùng ứng dụng web. Để thực hiện điều này, tôi có một phương thức điều khiển chấp nhận thông tin về tệp mà họ muốn truy cập, kiểm tra ủy quyền của họ và sau đó nếu họ được ủy quyền sử dụng x-sendfile để gửi cho họ. Khái niệm này hoạt động tốt ngoại trừ một snag: nếu chúng yêu cầu một tài nguyên với a. trong đó định tuyến của tôi không biết xử lý nó. Trong tập tin tuyến đường của tôi tôi có:định tuyến và thông số đường ray bằng dấu '.' trong số họ

match 'atb_resources/:guid/:resource' => 'atb_resources#show', :as => :get_atb_resource, :via => :get 

và nhưng sau đó nếu tôi cố gắng này trong spec của tôi:

get 'show', :guid => 'some_guid', :resource => 'blah.txt' 

spec không thành công với một:

Failure/Error: get 'show', :guid => @atb.guid, :resource => 'blah.txt' 
ActionController::RoutingError: 
    No route matches {:guid=>"ABCDEFG5", :resource=>"blah.txt", :controller=>"atb_resources", :action=>"show"} 

nhưng điều này là tốt:

get 'show', :guid => 'some_guid', :resource => 'blahDOTtxt' 

Tôi giả định vấn đề là định tuyến của tôi, nhưng tôi không thực sự hiểu được khoảng thời gian ảnh hưởng đến các tuyến đường như thế nào. Bất kỳ ý tưởng?

Trả lời

8

Đối với Rails 3 bạn có thể thêm video này vào tuyến đường của bạn:

:constraints => { :resource => /.*/ } 

cho Rails 2 (AFAIK):

:requirements => { :resource => /.*/ } 

Rails sẽ cố gắng để giải thích các .txt như một specifier định dạng mà không cần một trong những, cái đó.

+0

Chính xác những gì tôi cần, cảm ơn! – Matthew

Các vấn đề liên quan