【问题标题】:Dynamic root path route动态根路径路由
【发布时间】:2011-08-14 17:53:08
【问题描述】:

如果动态根路由取决于...天气、当前时间等,我该如何使用它?

我想到了两种方式:ApplicationController 级别和 Rack 重定向。

  • 使用第一个解决方案,我将检查我的动态状态并重定向到特定页面。
  • 就使用路由级别而言,第二种解决方案更加原生

例如

root :to => proc { |env| [ 302, {'Location'=> some_code }, [] ] }

但我希望看到的是如何将简单的 lambda 用于路由选项,例如:

root :to => "mycontroller#myaction", :some_param => proc{ DateTime.now.hour }

它不起作用,但它显示了我的期望

【问题讨论】:

    标签: ruby-on-rails ruby routes rack


    【解决方案1】:

    我不知道为什么你需要初始化路由表中的一个参数,而同样的事情可以在控制器中完成:

    params[:some_param] = DateTime.now.hour
    

    您还可以根据需要在控制器内部进行重定向,而不是使用redirect_to 方法过于依赖路由表。

    【讨论】:

    • 其实我现在的运行方式是这样的:在控制器中重定向。但它也改变了浏览器中的 url,它看起来不像是原生的。我只想在路线中告诉 Rails:这条路线是晚上的根,而这条路线是早上的 :)。
    • 您可以有一个控制器方法,根据一天中的时间调用两种不同的操作之一。那会容易得多。
    • 我也有类似的需求。我知道这是近十年前的问题,但仍然没有得到很好的回答。控制器重定向使新路由显示在浏览器上,这不是我们想要的。如果您点击 abc.com,根控制器应根据某些条件重定向到其他一些控制器操作,但显示的 URL 仍应为 abc.com,而不是 abc.com/home 或其他内容。
    • @AskarHussain 您可以对路线应用什么样的条件是有限制的。最好有一条带有智能控制器的路线,而不是一条智能路线。
    【解决方案2】:

    有人知道吗?尽管这个问题现在已经有十年了,但我仍然看不到在 Rails 中这样做的干净方法。我有根路径的路由约束。我的需要是,一旦他们执行该操作,那么将检查一些条件,并基于该请求最终应由另一个控制器操作处理。我可以做 redirect_to 但浏览器中显示的 URL 也会改变,这不是我想要的。如果他们访问 abc.com,他们仍应保留在 abc.com,而不是重定向到 abc.com/home 或其他地方。有人知道吗?

    【讨论】:

    • 经过一些试验和错误后,我更倾向于通过路线限制来解决这个问题,它可能会起作用,如果是这样,会报告。
    猜你喜欢
    • 2018-07-22
    • 2022-01-04
    • 2019-09-13
    • 1970-01-01
    • 2023-03-30
    • 2016-08-31
    • 1970-01-01
    • 2016-12-23
    • 2018-08-19
    相关资源
    最近更新 更多