2010-07-24 49 views
2

我有一個Rails 3應用程序,比如說,酒店,其中酒店屬於父區域。當用戶點擊應用程序(由mongrel >> nginx提供服務)時,我希望請求中使用的域名決定要提供哪些區域的酒店(域名>>區域)。要做到這一點,我可以看到兩個選項:Rails路由到模型實例 - 通過域名


1)重寫URL nginx的,在域名後插入區域ID(例如birminghamhotels.co.uk => proxy_pass http://myupstream/areas/3 $ REQUEST_URI)。

優點:域與對象映射發生在接受域被定義的地方:nginx.conf。對用戶來說應該是透明的(在重寫時可能有相當的URL)。

缺點:中斷Rails url助手,不再有link_to或form_for。硬編碼的對象引用是頑皮的。


2)趕上域名routes.rb中,並通過爲每個區域(或者即使你看中的has_many)獨有的「域」屬性查找區域。

優點:應該允許使用所有的Rails URL助手。請求的域直接鏈接到資源,以便處理異常。

缺點:無需重寫nginx的網址,就不會看到用戶:birminghamhotels.co.uk/areas/3/hotels/42,而不是僅僅birminghamhotels.co.uk/hotels/42?另外,我不知道該怎麼做!


所以,我已經試過選項#1,但遇到了與URL傭工等我試着拿出嘗試選項#2的方式,但一直沒能蘇斯正確的麻煩語法,儘管很多ogling。現在,我無法通過搜索找到任何答案,這讓我覺得我得到了這個問題的錯誤結局。有第三種選擇嗎?你會如何解決它?

哦,順便說一句,我不建設另一個酒店上市網站 - 已經足夠。恰好是一個足夠接近的例子。

回答

1

假設每個區域都有某種DOMAIN_NAME場,好像你應該能夠做這樣的事情:

class HotelsController < ApplicationController 
    def index 
    @hotels = Area.find_by_domain_name(request.subdomains.first).hotels 
    end 
end 

你甚至可以使用Lambda如果你喜歡它重構爲一個named_scope。