首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别动态URL中的参数?

如何识别动态URL中的参数?
EN

Stack Overflow用户
提问于 2011-01-14 18:57:59
回答 1查看 1.1K关注 0票数 1

我们正在构建一个Rails CMS,其中博客或新闻列表可以出现在站点树中的任何地方。这意味着任何页面都可以根据数据库字段知道它们的类型-例如:一个页面知道它的类型是newslisting,所以一旦该页面的URL被调用,我们就需要它被newslistingcontroller处理。新闻页面的子页是新闻故事-每个都有日期和类别。

指向newslisting的URL可能是

代码语言:javascript
复制
/dogs/snoopy-news/ 

一个新闻故事可能是

代码语言:javascript
复制
/dogs/snoopy-news/snoopy-is-great/

对于我们来说,复杂的是在新闻故事或类别列表的列出日期范围中有额外参数的URL,例如:

列出所有11月份的新闻故事

代码语言:javascript
复制
/dogs/snoopy-news/2010/11/

或列出所有将食物作为其类别的故事:

代码语言:javascript
复制
/dogs/snoopy-news/category/food/

由于最新滑动页面可以在站点层次结构中的任何级别,我们如何识别2010是一个参数还是该类别是一个参数?

(我们将在数据库中存储每个页面的所有URL,以便我们可以首先查找是否存在与某个URL对应的页面)

编辑:这篇文章给出了一个可能的解决方案:Dynamic CMS like routes in ruby on rails,我们将尝试并返回报告。在CMS中保存页面时,我们将在该点将路由添加到路由表中,不仅针对页面本身,还针对可能的参数:

代码语言:javascript
复制
/dogs/snoopy-news/{year}/{month}/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-16 19:52:07

您可以使用路由全局匹配和约束来匹配适当的模式。

代码语言:javascript
复制
# Rails 2.x
map.connect "*path/:year/:month", 
             :constraints => {:year => /\d{4}/, :month => /0[1-9]|1[0-2]/ },
             :controller => :pages, :action => :month_archive

# Rails 3.x
match "*path/:year/:month" => "pages#month_archive", 
             :constraints => {:year => /\d{4}/, :month => /0[1-9]|1[0-2]/ }

这将匹配/dogs/snoopy-news/2010/11并在参数散列中传递:path => "dogs/snoopy-news", :year => "2010", :month => "11"。它将匹配最后两个网段为一年和一个月的所有路由,而不管之前有多少网段。它将拒绝最后两个网段中与正确的年份和月份不匹配的任何路由。如何处理:path参数取决于您在控制器中的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4690298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档