我不确定这甚至是什么,所以如果之前已经提出这个问题,请告诉我。我无法通过我在rails中描述它的任何方式找到它。我在rails也很新。
我有一个网站,我目前用于举办自己的锦标赛。我想打开这个网站,让其他人举办自己的比赛。我希望能够基本上复制我目前拥有的网站的所有布局和功能,但它将具有特定于他们的锦标赛的数据。
所以现在我有domain.com/seasons
和domain.com/admin
。我设想它是domain.com/tournament1/seasons
和domain.com/tournament1/seasons
。
我有两个原因,不希望它作为每个新锦标赛的子域名。首先是所有用户通过openauth登录,我希望通过所有锦标赛系列登录。第二个是我通过heroku运行应用程序,据我发现,这对于子域名似乎不太友好。
所以我想我的问题是......我甚至称之为什么,这是最好的方法呢?我认为它是控制器中的某种控制器。我的主要问题是甚至无法对谷歌进行足够好的描述。
提前致谢。对不起痉挛。
答案 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
我需要做的第二点是标准的Rail设置只允许通过URL传递ID
但是,为了创建slugged
路由,您希望使用某些内容来接受id
以外的数据。这样做的方法是使用friendly_id
gem
这将允许您传递以下内容:
domain.com/tournament_name/seasons