2011-12-30 7 views
17

Tôi có một ứng dụng đường ray (Rails 3.0) mà tôi cần tạm thời ngừng hoạt động. Trong khi điều này có hiệu lực, tôi muốn tạo một tuyến đường mới sẽ hướng mọi yêu cầu đến một phần nội dung tĩnh. Tôi có một bộ điều khiển được thiết lập để phục vụ các trang tĩnh của tôi.Làm cách nào để tạo một tuyến đường Rails 3 sẽ khớp với tất cả các yêu cầu và trực tiếp đến một tài nguyên/trang?

tôi đã cố gắng một cái gì đó như thế này:

match '*' => 'content#holding' 

match '*/*' => 'content#holding' 

để phù hợp với một lộ trình ký tự đại diện như đã mô tả ở đây: Rails 3 route globbing không thành công.

Đây có lẽ là câu trả lời thực sự đơn giản, nhưng tôi không thể hiểu được.

/EDIT/ Quên đề cập đến rằng tôi đã có quy tắc này ở đầu tệp routes.rb của tôi.

+0

Bạn đã đặt tuyến đường này ở đầu tệp tuyến đường của mình chưa? – Robin

Trả lời

39

Rails cần để ràng buộc các thông số url cho một biến, hãy thử này:

match '*foo' => 'content#holding' 

Nếu bạn cũng muốn khớp với /, sử dụng dấu ngoặc đơn để chỉ định rằng foo là tùy chọn:

match '(*foo)' => 'content#holding' 
+0

Điều này dường như hoạt động cho tất cả các đường dẫn, nhưng không phải cho chính gốc. Tôi đã thêm một tuyến đường tạm thời bổ sung vào đầu route.rb, vì vậy bây giờ nó đang làm việc như thế nào tôi muốn - cảm ơn! – Nick

+1

Kết quả cuối cùng của tôi trông giống như sau: "match '* foo' => redirect ('/') #NEWLINE root: to => 'content # holding'" Về cơ bản tôi đã lấy ý tưởng của bạn, thêm chuyển hướng, sau đó chuyển gốc tạm thời sang trang giữ của tôi. – Nick

+1

xem các chỉnh sửa của tôi để nhận root – klochner

0

Vị trí trong "routes.rb" là dòng này nằm ở đâu?

Để ưu tiên hơn các tuyến đường khác, trước tiên phải được đặt trước.

Là một thay thế, bạn có thể xem xét điều này: http://onehub.com/blog/posts/rails-maintenance-pages-done-right/

Hoặc này: Rails: admin-only maintenance mode

+0

Rất tiếc - quên đề cập rằng có, nó nằm ở đầu tệp. – Nick

+0

Bạn đã khởi động lại máy chủ chưa?:-) –

+0

cập nhật câu trả lời –

0

tôi chạy vào một cái gì đó như thế này, nơi tôi đã có tên miền như một tham số trong lộ trình của tôi:

match '/:domain_name/', :to => 'sitedetails#index', :domain_name => /.*/, :as =>'sitedetails' 

Các mảnh chìa khóa để đây là /.*/ đó là một ký tự đại diện cho khá nhiều bất cứ điều gì. Vì vậy, có thể bạn có thể làm điều gì đó như:

match '/:path/', :to => 'content#holding', :path=> /.*/, :as =>'whatever_you_want' 
1

Tôi đã làm điều này ngay hôm qua và lần đầu tiên đưa ra giải pháp mà klochner hiển thị. Những gì tôi không thích về điều này là thực tế là bất cứ điều gì bạn nhập vào URL, vẫn ở đó sau khi tải trang, và kể từ khi tôi muốn bắt tất cả các tuyến đường chuyển hướng đến root_url của tôi, đó không phải là rất hấp dẫn.

Những gì tôi đã đưa ra cái nhìn như thế này:

# in routes.rb 
get '*ignore_me' => 'site#unknown_url' 

# in SiteController 
def unknown_url 
    redirect_to root_url 
end 

Hãy nhớ dính mục các tuyến đường ở dưới cùng của tập tin!

EDIT: Như Nick đã chỉ ra, bạn cũng có thể thực hiện chuyển hướng trực tiếp trong tệp tuyến đường.

+0

Có - Tôi cũng nhận thấy điều đó. Bạn cũng có thể thực hiện chuyển hướng ngay trong routes.rb - xem nhận xét của tôi ở trên về câu trả lời của klochner – Nick

+0

@Nick Ah, giờ đây rất tiện lợi. Sẽ chuyển sang giải pháp đó. – cvshepherd