Rails通配符路由与数据库查找和多个控制器

我有一个Rails应用程序设置,在定义了所有其他站点路由后,我有一个全能通配符供我的用户在非保留路径/关键字的选定根级别“虚荣”URL上显示其配置文件:

get '*path' => 'profiles#show' 

然后,Profiles控制器检查以确保路径定义有效的Profile,否则重定向到root。 这很好用。

我现在需要做的是创建一种机制,其中catch-all 路径可以定义Profile Blog,基于数据库查找适当控制器路由到的路径

我不想进行重定向…我想在原始通配符URL上加载配置文件或博客内容。

我有什么选择从通配符路由 – > db lookup – >正确的控制器?

换句话说,这个逻辑可能在哪里适当?

谢谢。

您似乎想要一个匹配某些模式(正则表达式)的路由约束,该模式定义路径是否与路由匹配,或者它是否尝试后续路由。 也许是这样的。

 get '*path', :to => 'profiles#show', :constraints => { path: /blog\/.+/ } 

这个想法是你必须在路由级别知道一些东西,如果它可以基于路径,那么上面的东西将起作用,否则如果它需要更复杂,你可以使用自定义约束类。

 # lib/blog_constraint.rb class BlogConstraint def initialize @slugs = Blog.pluck(:slug) end def matches?(request) request.url =~ /blog\/(.+)/ @slugs.include?($1) end end # config/routes.rb YourApp::Application.routes.draw do get '*path', :to => 'blogs#show', :constraints => BlogConstraint.new get '*path', :to => 'profiles#show' end