首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过域名对实例建模的Rails路由

通过域名对实例建模的Rails路由
EN

Stack Overflow用户
提问于 2010-07-24 03:06:01
回答 1查看 1.1K关注 0票数 2

我有一个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,我仍然无法提供正确的语法。现在,我无法通过搜索找到任何答案,这让我认为我在这个问题上弄错了。还有第三种选择吗?你怎么解决这个问题?

哦,顺便说一句,我不会再建一个酒店列表网站了--已经够多的了。正好是个很近的例子。

EN

回答 1

Stack Overflow用户

发布于 2010-07-29 22:11:26

假设每个区域都有某种domain_name字段,那么您应该可以这样做:

代码语言:javascript
复制
class HotelsController < ApplicationController
  def index
    @hotels = Area.find_by_domain_name(request.subdomains.first).hotels
  end
end

如果您愿意,甚至可以使用lambda将其重构为named_scope。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3323643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档