Ruby on Rails中的URI管理和导航

时间:2011-02-21 22:58:16

标签: ruby-on-rails routing uri

我想基于URI实现rails中的特殊路由(我使用带有Mongoid和devise的rails 3.0.4)。假设我的用户登录,一旦登录我想将他重定向到私人区域,例如http://www.mysite.com/site1。许多用户可能属于site1,很多用户可能属于site2 ...一个站点的用户无权查看其他站点。今天登录后重定向很好,但我对如何实现siteX感到困惑(每个站点都有自己的数据)。我有以下路线:

match '/:site_name' => 'site#index', :constraints => { :site_name => /'a pattern'/ }
  resources :sites do
end

因为我需要坚持这种URI格式,我应该将所有其他资源嵌套在:sites中吗?例如,如果我想显示网站2的订单1,则网址应该看起来像http://www.mysite.com/site2/order/1。我不能将资源的名称“sites”放在URI中,因为它直接从标识符开始。有没有另一种方法可以做到这一点,最好的做法是什么?希望我的解释有意义。

非常感谢您的帮助! 泰德

2 个答案:

答案 0 :(得分:1)

我建议你废弃“子目录”的想法。你会link_to和其他帮助者遇到(而非难以克服的)困难。

我会设置子域名(a la,site1.mysite.com),如果这可能适用于你的情况

答案 1 :(得分:0)

url.com/site_name是一种坚果。

如果只有一个用户可以属于某个网站,请从用户角度进行操作,然后使用resource而不是resources

例如,url.com/orders将是current_user.orders,因为current_user has_one site(或者是一个站点的成员)。

如果您需要特定于站点的导航,请从/site_name中抽取公共性质的站点特定详细信息。例如,url.com/site_name/pricing

如果您确实想要将您的网站分解为/site_name个特定路由,那么请将其分解为子域。您甚至可以尝试使用sudomain devise来帮助您入门。