我试图得到这样的工作对我的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
已添加到我的答案中以反映更好的解决方案。我不知道为什么后两者会有不同的表现 - 但最终,这并不重要 - 它们不是您所需路线的最佳/最具说明性的选择。 –
你能告诉我你的两个新例子的不同行为是什么? –