2011-09-02 96 views
1

我目前在爲我的應用程序設置正確的路由時遇到了一些問題。
總之我想有網址,像這樣:

解釋:
Show actual page for the selected poll
摘要:
localhost:3000/polls/:category_slug/:poll_id
例如:
localhost:3000/polls/technology/1337
路線s.rb
get 'polls/:category_slug/:poll_id' => 'polls#show', :as => :poll

Rails 3 - 覆蓋路由

而且用戶應該能夠對一些標準的篩選調查,像顯示頂投票,新的民調等等...

解釋:
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')被重寫第一路由,因此問題軌s將:filter_mode識別爲:poll_id

所以我的問題是,我該如何改變這種行爲,所以這兩個路線將實際上工作
而不覆蓋對方?
(第一條路線可以完美地工作,當我離開第二條路線時)

我希望有人瞭解我的問題,感謝每一個幫助。

+0

爲什麼不使用searchlogic或其他gem提供類似的功能,並在params中傳遞過濾條件,而不觸及路由? – socjopata

+0

我沒有使用寶石,因爲我需要像上面描述的URL(例如polls/technology/top,它返回技術類別中頂級民意調查的列表)。我的方法是使用鏈接(這將調用我的過濾器控制器)進行過濾,並且沒有搜索表單(它們正在像URL中的「?category = 1」那樣傳遞過濾條件)。不幸的是,我無法弄清楚,如何使用searchlogic gem創建這樣的URL,所以我決定這樣做^^ – sonnypgs

+0

感謝您滿足我的好奇心:) – socjopata

回答

1

您可以在過濾器上設置一個限制條件,只接受字符串,然後將其放在另一個之前。它將落入poll_id之一。

+0

感謝您的快速回答。像現在這樣工作。 – sonnypgs