2010-02-17 34 views
5

Có một cách đơn giản viết này:Rails, định tuyến nhiều tuyến đường được đặt tên cho một hành động

map.old_site_cusom_packages '/customs_packages_options.html', :controller => :public, :action => :redirect_to_home 
    map.old_corporate '/corporate.html', :controller => :public, :action => :redirect_to_home 
    map.old_track '/track.html', :controller => :public, :action => :redirect_to_home 
    map.old_links '/links.html', :controller => :public, :action => :redirect_to_home 
    map.old_contact '/contact.html', :controller => :public, :action => :redirect_to_home 

Tôi muốn gửi nhiều tuyến đường được đặt tên cho một hành động trên một bộ điều khiển, tôi đảm bảo url còn sót lại từ một trang web cũ chuyển hướng đến các trang chính xác.

Chúc mừng.

Trả lời

2

Bạn luôn có thể viết một lộ trình đa mục đích với một biểu thức chính quy để nắm bắt những thông tin chi tiết:

old_content_names_regexp = Regexp.new(%w[ 
    customs_packages_options 
    corporate 
    track 
    links 
    contact 
].join('|')) 

map.old_content '/:page_name.html', 
    :controller => :public, 
    :action => :redirect_to_home, 
    :requirements => { 
    :page_name => old_content_names_regexp 
    } 

Đó nên nắm bắt các trang cụ thể và chuyển hướng chúng cho phù hợp . Một giải pháp mạnh mẽ hơn là có một số loại bảng tra cứu trong cơ sở dữ liệu được kiểm tra trước khi phục vụ bất kỳ nội dung hoặc trang loại 404 nào.

Sửa: Đối với các tuyến đường được đặt tên, nó là một sự thay đổi dễ dàng:

%w[ 
    customs_packages_options 
    corporate 
    track 
    links 
    contact 
].each do |old_path| 
    map.send(:"old_#{old_path}", 
    "/#{old_path}.html", 
    :controller => :public, 
    :action => :redirect_to_home, 
) 
end 

Trong hầu hết các trường hợp, các tuyến đường cũ có thể được viết lại bằng con đường di sản ít được liệt kê đầu tiên. Nó cũng là tốt nhất để giữ cho bảng định tuyến như cắt càng tốt. Phương pháp thứ hai là nhiều hơn một cái nạng để thử và cầu các tuyến đường cũ.

+0

Perfect ... và để làm cho nó thậm chí nhiều hơn ngắn gọn bạn không cần phải tạo ra các đối tượng regex bạn chỉ có thể làm ... old_content_names_regexp =/customs_packages_options | nhà | Đường/ – Smickie

+1

Trong khi gọn gàng, điều này không thực sự làm những gì được yêu cầu. Nó cung cấp một tuyến đường được đặt tên được tham số hóa với một 'page_name'. Câu hỏi được đề cập đến nhiều tuyến đường được đặt tên. –

+0

Nó không cung cấp cùng chức năng tên đường, nhưng rất dễ để thêm vào. – tadman

7

Sử dụng with_options phương pháp:

map.with_options :controller => :public, :action => :redirect_to_home do |p| 
    p.old_site_custom_packages '/customs_packages_options.html' 
    p.old_corporate '/corporate.html' 
    p.old_track '/track.html' 
    p.old_links '/links.html' 
    p.old_contact '/contact.html' 
end 
Các vấn đề liên quan