2012-05-15 13 views
14

Tôi nghĩ rằng điều này sẽ được khá dễ dàng nhưng tôi không quen thuộc với cách nó được thực hiện ...Rails: chuyển hướng đến đường dẫn hiện tại nhưng tên miền phụ khác

Làm thế nào để bạn viết một trước khi lọc đó sẽ kiểm tra xem các yêu cầu hiện tại dành cho một số miền phụ nhất định và nếu như vậy chuyển hướng nó đến cùng một url nhưng trên một tên miền phụ khác?

Tức là: blog.myapp.com/posts/1 vẫn ổn nhưng blog.myapp.com/products/123 chuyển hướng đến www.myapp.com/products/123.

Tôi đã suy nghĩ một cái gì đó giống như ...

class ApplicationController < ActionController::Base 
    before_filter :ensure_domain 

    protected 
    def ensure_domain 
    if request.subdomain == 'blog' && controller_name != 'posts' 
     redirect_to # the same url but at the 'www' subdomain... 
    end 
    end 
end 

Làm thế nào để bạn viết rằng chuyển hướng?

Trả lời

12

ActionController::Redirecting#redirect_to cho phép bạn vượt qua một URL tuyệt đối, do đó, điều dễ nhất để làm sẽ là để vượt qua nó một với một cái gì đó như:

redirect_to request.url.sub('blog', 'www') 
+0

Ah, tôi không biết 'phương pháp .sub' tồn tại! Cảm ơn! – Andrew

+6

Doh! Phương thức phụ chỉ là phương thức phụ cũ ruby ​​cũ ... ok vì vậy sau khi thử nghiệm tiếp theo, công việc này nhưng tôi phải sử dụng nhiều hơn một regex để xử lý nó. Đối tượng 'request.url' cho tôi đủ để tìm ra phần còn lại, cảm ơn! – Andrew

+0

Chỉ cần hy vọng rằng bạn không bao giờ có www bất cứ nơi nào khác trong url của bạn ... – Qwertie

2

Một sự lựa chọn đơn giản để chuyển hướng từ tên miền phụ để tên miền phụ sẽ là sau redirect_to subdomain: 'www', :controller => 'www', :action => "index"

này sẽ được gọi là trên một tên miền ví dụ foo.apple.com sau đó sẽ đi đến www.apple.com