gpt4 book ai didi

ruby-on-rails - Rails 静态页面路由 - 有更好的方法吗?

转载 作者:行者123 更新时间:2023-12-02 17:43:31 24 4
gpt4 key购买 nike

为了澄清,情况如下:

我正在构建一个非常简单的 CMS,它将成为我计划在未来创建的多个应用程序的基础。我真的希望能够创建一个名为“About”的页面(大部分是静态的),并自动能够通过“/about”访问它,而无需修改routes.rb。

我目前有一个像这样的通配符路由,效果很好:

match '/*slug', :to => 'pages#dynamic_page', 
:constraints => { :fullpath => /.+\.html/ }

问题是,我真的希望能够省略末尾的“.html”。但是,与“/pages/about”之类的 url 相比,我更喜欢扩展名。有更好的方法来处理这个问题吗?当我删除约束时出现的问题是,对不存在的项目的请求会通过 Rails 路由器,这显然不太理想,因为这是必须处理的额外开销。

还有更好的办法吗?如果请求的页面是静态页面,是否有某种方法可以完全避免路由器,这样我就可以消除通配符路由?

谢谢!

最佳答案

要在 Rails 路由器中解决此问题,您应该能够将一条路由添加到 paths.rb 的最底部,如下所示:

match '/:slug(.:format)', :to => 'pages#dynamic_page'

括号将路由的 :format 参数标记为可选,因此/about 或/about.html 应该有效。

这需要位于路由文件的底部,这样就不会干扰您的其他路由。

如果您想避免使用 Rails 路由器,您有两个选择,两者都更高级一些。

  1. 在网络服务器的配置中,添加一条将/about 映射到其他 URI 的重写规则。

  2. 添加 Rack 中间件或 Rails 金属来处理静态页面路由。这避免了通过整个 Rails 路由堆栈运行这些请求,但 Rails 3 路由器非常快,我不确定是否值得为了提供半静态页面而添加如此多的复杂性。

您可能还想查看High Voltage gem 。它是一个主要提供静态页面的 Rails 引擎。默认情况下,它会为您提供一个/pages/about 样式的 URL,但您可以将以下内容添加到您的路由中以使其更漂亮:

# High Voltage treats pages like a REST resource; the page's name is the ID 
match '/:id(.:format)', :to => 'high_voltage/pages#show'

关于ruby-on-rails - Rails 静态页面路由 - 有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4101350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com