【问题标题】:How to handle unpredictable routes?如何处理不可预测的路线?
【发布时间】:2011-09-08 04:06:58
【问题描述】:

假设以下路径是合法且可解析的:

http://test.local/wizards/home
http://test.local/wizards/wizardfest2012/dates
http://test.local/dragons/
http://test.local/dragons/blog/stop-slaying-us
http://test.local/

这是(如果您不知道的话)包含博客的 CMS,因此 slug 将由用户生成。对于保留的命名空间(例如管理员),我有一些路由要首先处理。

我假设用户生成的路由需要被路由到 Page 控制器 - 但是,我不认为务实地向 routes.rb 添加一行是有效的。那么我的问题是如何处理参数的第一部分(在本例中为wizardsdragons)以从模型中获取正确的信息?

这是我的一个想法 - 拆分(以某种方式)段的第一部分(再次,wizardsdragons,并将段的其余部分(例如,/wizardfest2012/dates)传递给模型以获取相关内容。

对最有效的方法有什么想法吗?

【问题讨论】:

  • 什么样的CMS针对不同的页面有不同的模型?都是同一个型号。也许如果你发布一个不那么做作的例子来说明你正在尝试做什么?
  • 页面控制器,页面模型。不知道不同的模型是从哪里来的。
  • 用你自己的话说,将龙/巫师从“模型”中分离出来。

标签: ruby-on-rails routing content-management-system


【解决方案1】:

我不确定我是否理解您想要实现的目标,但也许这就是您想要的:

constraints :camp => /wizards|dragons/ do
  match ':camp/home'    => "pages#home"
  match ':camp/blog/:title' => "pages#blog"
  # ...and all the routes with known components
  match ':camp/*other'  => "pages#other"
end

您可以创建一个before_filter 来识别params[:camp] 并准备必要的模型或任何需要的东西。

other 操作会将字符串 "wizardfest2012/dates" 接收为 params[:other]。我希望这是您所需要的。

"Rails Routing from the Outside In" 指南可能值得一读,除非您已经阅读过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2012-02-14
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多