Rails 3 - 覆盖路由

时间:2011-09-02 10:50:00

标签: ruby ruby-on-rails-3 routing routes overwrite

我目前在为我的应用程序设置正确的路线时遇到一些问题。
总之,我希望有这样的网址:

说明:
Show actual page for the selected poll
抽象:
localhost:3000/polls/:category_slug/:poll_id
的示例:
localhost:3000/polls/technology/1337
的routes.rb
get 'polls/:category_slug/:poll_id' => 'polls#show', :as => :poll

此外,用户应该能够根据某些标准过滤民意调查,例如显示Top-Polls,New-Polls 等等...

解释:
Show a list of polls, which are matching the selected criteria
摘要:
localhost:3000/polls/:category_slug/:filter_mode
示例:
localhost:3000/polls/technology/top
的routes.rb
get 'polls/:category_slug/:filter_mode' => 'filter#by_mode', :as => :polls_filter


这就是问题 ActiveRecord::RecordNotFound : Couldn't find Poll with ID=top_all

第二条路线('polls/:category_slug/:filter_mode')覆盖第一条路线,因此Rails将:filter_mode识别为:poll_id

所以我的问题是,我怎么能改变这种行为,所以这两条路线实际上都会工作,而不会互相覆盖?(当我遗漏时,第一条路线会完美地工作第二个)

我希望有人理解我的问题,感谢每一个帮助。

1 个答案:

答案 0 :(得分:1)

您可以在过滤器上设置一个约束,只接受字符串,然后将其放在另一个上。它会落到poll_id中。