2011-01-08 28 views
7

Tôi có một ứng dụng đường ray mà tôi đã tạo cho một trang web cũ mà tôi đã chuyển đổi từ một cm khác (bằng ngôn ngữ không phải là đường ray, hehe). Hầu hết các trang cũ được ánh xạ tới các trang mới bằng cách sử dụng routes.rb. Nhưng vẫn còn một vài 404.Rails - bất kỳ cách nào ưa thích để xử lý 404?

Tôi là một newb đường ray nên tôi hỏi xem có cách nào nâng cao để xử lý 404 không. Ví dụ: nếu tôi đã lập trình bằng ngôn ngữ cũ của mình, tôi sẽ làm điều này:

  • Nhận URL (script_name) đã được truy cập và phân tích cú pháp.
  • Thực hiện tìm kiếm trong cơ sở dữ liệu cho bất kỳ từ khóa, id, v.v ... tìm thấy trong URL mới.
  • Nếu tìm thấy, chuyển hướng đến trang (hoặc nếu tìm thấy nhiều bản ghi, hãy hiển thị tất cả trên trang kết quả và cho phép người dùng chọn). Với đường ray tôi có thể muốn làm: status =>: moved_permanently tôi đoán?
  • Nếu không tìm thấy, hiển thị một 404.

Có bất kỳ viên ngọc/plugins hoặc hướng dẫn bạn biết điều đó sẽ xử lý một điều như vậy, nếu nó thậm chí còn có thể. Hoặc bạn có thể giải thích ở mức cao như thế nào có thể được thực hiện? Tôi không cần mẫu mã đầy đủ, chỉ cần đẩy theo đúng hướng.

PS. Đó là một ứng dụng 3 đường ray đơn giản sử dụng một mô hình Nội dung duy nhất.

+0

Giới thiệu về 'P.S.' của bạn, các mô hình không có gì, thực sự không có gì liên quan đến định tuyến. Bộ điều khiển chăm sóc đó. :) –

Trả lời

7

Đặt điều này trong các tuyến đường (sau mỗi tuyến đường khác mà bạn có, điều này sẽ nắm bắt mọi url)

match '*url' => 'errors#routing' 

Và bây giờ trong các lỗi điều khiển trong định tuyến hành động mà bạn có thể thực hiện bất kỳ logic ưa thích mà bạn muốn, và đưa ra một lượt xem như mọi khi (bạn có thể muốn thêm :status => 404 vào cuộc gọi render). Url được yêu cầu sẽ có sẵn trong bộ điều khiển dưới dạng params[:url].

+0

Tệ, đây chỉ là những gì tôi đang tìm kiếm để giúp tôi đi đúng hướng. Cảm ơn nhiều! – jyoseph

0

Có một cách xấu xí để làm điều này:

render :file => "#{RAILS_ROOT}/public/404.html", :layout => false, :status => 404 

Có lẽ ai đó có thể đi kèm với một giải pháp tốt hơn.

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