2011-04-26 89 views
1

我如何匹配多個控制器,例如一個ID?Rails 3路由如何匹配多個?

我在我的路線嘗試這樣做:如果你想匹配http://example.com/<something>

match '/:id' => 'kategoris#show' 
match '/:id' => 'tags#show' 
+1

你不能這樣做:)只是想知道,爲什麼你想要做這樣的事情? – 2011-04-26 06:33:56

+0

因爲我有類別和標籤。我想要一個平坦的鏈接結構 – 2011-04-26 06:35:36

+0

這是廢話 – fl00r 2011-04-26 08:27:00

回答

4

Rails的控制器路由不適合你。

您可以創建一個單一的ThingsController:

match '/:id' => 'things#show' 

,然後做適當的在你的ThingsController東西。

例如,在西納特拉(你可以安裝一個機架中間件),你可以這樣做:

get "/:id" do :id 
    if(@tag = Tag.find(:id)) 
    haml :tag 
    elsif(@category = Category.find(:id)) 
    haml :category 
    else 
    pass #crucially passes on saying 'not found anything'. 
    end 
end 

你會得到痛苦的REST式滑軌尖叫envangelists兩種方式。

+0

謝謝!我會去做一個單一的控制器行動策略。我不知道我能從路由中獲得如此美妙的東西:) – Yeameen 2011-04-26 06:50:43

0
match 'kategoris/:id' => 'kategoris#show' 
match 'tags/:id' => 'tags#show' 

match '/:id/kategoris' => 'kategoris#show' 
match '/:id/tags' => 'tags#show' 
+0

我想要一個扁平的鏈接結構 – 2011-04-26 06:41:03

1

如果您可以在您的標記ID和類別ID中實現可識別的區別,那麼您可以使用約束來查找它們。例如,如果類別始終以數字開頭並且標籤從不做,那麼您可以執行此操作。

match '/:id' => 'categories#show', :constraints => { :id => /^\d+/ } 
match '/:id' => 'tags#show' 

如果:id以數字開頭第一行只會匹配。如果不匹配,則第二行捕獲剩餘物。所以; /67-something被路由到類別控制器,/something被路由到標籤控制器。

相關問題