我有一个Rails 3应用程序,比如说,酒店属于父区域的酒店。当用户点击应用程序(由mongrel >> nginx提供服务)时,我希望请求中使用的域名来决定要服务的酒店区域(域名>>区域)。要做到这一点,我可以看到两个选择:
1)用nginx重写URL,在域名后插入区域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重写URL,用户就不会看到:birminghamhotels.co.uk s.co.uk/see/3/hotels/42,而不仅仅是birminghamhotels.co.uk s.co.uk/hotels/42?而且,我不知道该怎么做!
因此,我尝试了选项#1,但在URL帮助程序等方面遇到了麻烦。我尝试了一种尝试选项#2的方法,但是尽管有大量的ogling,我仍然无法提供正确的语法。现在,我无法通过搜索找到任何答案,这让我认为我在这个问题上弄错了。还有第三种选择吗?你怎么解决这个问题?
哦,顺便说一句,我不会再建一个酒店列表网站了--已经够多的了。正好是个很近的例子。
发布于 2010-07-29 22:11:26
假设每个区域都有某种domain_name字段,那么您应该可以这样做:
class HotelsController < ApplicationController
def index
@hotels = Area.find_by_domain_name(request.subdomains.first).hotels
end
end如果您愿意,甚至可以使用lambda将其重构为named_scope。
https://stackoverflow.com/questions/3323643
复制相似问题