我試圖得到這樣的工作對我的Rails應用程序:路由多個動作相同的控制器和動作
match '/:language', :to => 'posts#search_result'
match '/:tag', :to => 'posts#search_result'
match '/:language/:tag', :to => 'posts#search_result'
我用這search_result行動,以過濾取決於語言的一些職位,標籤。
問題是,有時:標籤將爲零或:語言將爲零;所以調用的動作時,我有這3種可能性:
<%=link_to "Spanish", {:controller => 'posts', :action => 'search_result', :language => "spanish"} %>
<%= link_to "Spanish", {:controller => 'posts', :action => 'search_result', :language => "spanish", :tag => @tag} %>
<%=link_to "#{tag.name}", {:controller => 'posts', :action => 'search_result', :tag => @tag} %>
而且我厚望,有一個像網址:
/spanish (for the first case)
/spanish/rails (where rails is a tag, for the second case)
/rails (for the third case)
但現在我正在分辯事情第一和第三的情況下,但對於第二種情況,我得到: /spanish?tag = rails 或再次/西班牙語(取決於我是否先選擇了標記或語言)。
我希望我解釋自己的權利。任何想法??。謝謝!。
嗨,這幫助我瞭解了路由是如何工作的......但仍然看不清楚。我明白你說的話,所以基本上我明白我應該做一些類似'match'/ tags /:tag'的東西,至少只能發佈帖子。#search_result以/ tag開頭的URL。什麼是解決方案?如果路由器在language:和tag之間沒有區別,爲什麼這兩行會給出不同的行爲?:'match'/:language(/:tag)',:to =>'posts#search_result'' and'match '/:tag(/:language)',:to =>'posts#search_result'' – diegopau
已添加到我的答案中以反映更好的解決方案。我不知道爲什麼後兩者會有不同的表現 - 但最終,這並不重要 - 它們不是您所需路線的最佳/最具說明性的選擇。 –
你能告訴我你的兩個新例子的不同行爲是什麼? –