2012-03-08 31 views
6

Tôi đang cố gắng xóa tuyến đường "bắt tất cả" hoặc "mặc định" khỏi ứng dụng đường ray sản xuất. Tôi quan tâm đến việc duy trì hoạt động trong khi thu thập nhật ký sử dụng của nó để tôi có thể thay thế bằng các tuyến đường được mã hóa cứng thích hợp.Sử dụng nhật ký tuyến đường mặc định trong đường ray

Vì vậy, với tôi có đường tuyến mặc định sau trong tệp config/routes.rb của tôi.

match '/:controller(/:action(/:id))' 

Làm cách nào để tạo hoặc truy xuất nhật ký mỗi khi tuyến đường bị trúng. Nhật ký này lý tưởng chỉ bao gồm các yêu cầu thực sự được xử lý bởi tuyến đường này cùng với các tham số và sẽ cần phải thoát khỏi chính tuyến đường hoạt động như bình thường.

Trả lời

7

Một cách để bạn có thể làm điều này là sự thay đổi các tuyến đường mặc định để:

match ':controller(/:action(/:id))(.:format)', :using_default_route => true 

Sau đó đặt các chức năng sau đây vào app/controllers/application_controller.rb

before_filter do 
    if params[:using_default_route] 
    logger.info("Default route for #{request.path.inspect}. params = #{params.inspect}") 
    end 
end 
+0

Bạn rất tuyệt vời. –

+0

câu trả lời hay, không biết tính năng đó, cảm ơn và +1 – apneadiving

+0

Chỉ cần cập nhật. Trong khi điều này làm việc để ghi lại các tuyến đường đến, nó gây ra việc tạo đường cho tuyến mặc định không khớp (vì using_default_route không được truyền). Tôi đã cố định điều này bằng cách thêm một trận đấu thứ hai sau trận đấu đầu tiên sẽ cho phép tạo ra, và sự tồn tại của nó sẽ được chọn nếu nó được sử dụng. Tuy nhiên, sự sợ hãi của tôi là loại bỏ cả hai dòng này cuối cùng sẽ khiến những quan điểm đó thất bại. Nó sẽ là tuyệt vời nếu có một cách để đăng nhập thế hệ trong đó sử dụng các tuyến đường mặc định quá. –

8

Một khả năng khác sẽ được tận dụng Rails Router constraints tùy chọn:

match '/:controller(/:action(/:id))', constraints: -> (req) { 
    Rails.logger.info("Default route used: #{req.path.inspect}") 
    true 
} 

Lưu ý: lambda lại chuyển thành true để trận đấu thành công.

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