Rails伪子域

时间:2014-05-19 01:28:16

标签: ruby-on-rails heroku

我不确定这甚至是什么,所以如果之前已经提出这个问题,请告诉我。我无法通过我在rails中描述它的任何方式找到它。我在rails也很新。

我有一个网站,我目前用于举办自己的锦标赛。我想打开这个网站,让其他人举办自己的比赛。我希望能够基本上复制我目前拥有的网站的所有布局和功能,但它将具有特定于他们的锦标赛的数据。

所以现在我有domain.com/seasonsdomain.com/admin。我设想它是domain.com/tournament1/seasonsdomain.com/tournament1/seasons

我有两个原因,不希望它作为每个新锦标赛的子域名。首先是所有用户通过openauth登录,我希望通过所有锦标赛系列登录。第二个是我通过heroku运行应用程序,据我发现,这对于子域名似乎不太友好。

所以我想我的问题是......我甚至称之为什么,这是最好的方法呢?我认为它是控制器中的某种控制器。我的主要问题是甚至无法对谷歌进行足够好的描述。

提前致谢。对不起痉挛。

1 个答案:

答案 0 :(得分:1)

由于您已经在评论中找到了解决方案,我只会解释一下它是如何运作的:


<强>路由

在应用程序中使用路由时,您必须记住Rails必须接受用户发送的path,并通过ActionDispatch::Routing中间件将请求分配给特定的控制器操作

您引用的问题是如何根据其他参数引导这些请求(在您的情况下是tournament_name

发现的答案是使用路线中的nested resources功能:

#config/routes.rb
resources :tournaments do
    resources :seasons #-> creates domain.com/:tournament_id/seasons
end

这将创建一系列路由,基本上将params[:tournament_id] var传递给您的seasons控制器。你可以像这样处理它:

#app/controllers/seasons_controller.rb
def index
    @tournament = Tournament.find params[:tournament_id]
end

Slugging

我需要做的第二点是标准的Rail设置只允许通过URL传递ID

但是,为了创建slugged路由,您希望使用某些内容来接受id以外的数据。这样做的方法是使用friendly_id gem

这将允许您传递以下内容:

domain.com/tournament_name/seasons